티스토리 뷰

학교공부/JSP

chapter - 13 (세션)

날따라해봐요요롷게 2021. 5. 16. 20:20

- 세션의 개요

- 세션 생성

- 세션 정보

- 세션 삭제

- 세션 유호 시간 설정

 

  

- 세션의 개요

   :  세션은 클라이언트와 웹 서버 간의 연결을 지속적으로 유지하는 방법이다.

클라이언트가 서버에 접근할 때 http 프로토콜의 request를 하고 서버는 response 하여 클라이언트가 서버에 접근할 수 있도록 해준다. 하지만 클라이언트가 해당 서버에 접속을 할 때마다 계속해서 처리를 해준다면 서버 과부하가 일어날 수 있어 이를 해결하기 위해 세션을 사용한다.

세션은 사용자 인증을 통해 고유한 번호를 주며, 해당 번호를 받은 사용자는 특정 페이지를 지속적으로 사용할 수 있도록 유지한다.

JSP 페이지에서는 세션 기능을 사용할 수 있도록 session 내장 객체를 제공한다.

 

session 내장 객체 메소드 종류

 

- 세션 생성

  세션 생성은 session 내장 객체의 setAttribute() 메소드를 사용한다.

void setAttribute(String name, Object value) => session.setAttrubute("memberID", "admin");

매개변수 name은 세션으로 사용할 세션 속성 이름을 나타내며, 세션에 저장된 특정 값을 찾아오기 위한 키로도 사용된다.

두 번째 매개변수 value는 세션의 속성 값을 나타낸다. 세션 속성 값은 Object 객체 타입만 가능하기 때문에 int, double, char 등의 기본 타입은 사용할 수 없다.

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" language="java"%>
<html>
<head>
<title>Session</title>
</head>
<body>
	<form action="session01_process.jsp" method="post">
		<p> ID : <input type="text" name="id">
		<p> PASSWORD : <input type="text" name="passwd">
		<p> <input type="submit" value="login">
	</form>
</body>
</html>
/////////////////////////////
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" language="java"%>
<html>
<head>
<title>Session</title>
</head>
<body>
	<%
		String user_id = request.getParameter("id");
		String user_passwd = request.getParameter("passwd");
		
		if(user_id.equals("admin") && user_passwd.equals("1234")){
			session.setAttribute("userID", user_id);
			session.setAttribute("userPW", user_passwd);
			out.println("세션 설정이 성공했습니다.<br>");
			out.println(user_id+"님 환영합니다.");
		} else {
			out.println("세션 설정이 실패했습니다.");
		}
	%>
</body>
</html>

## 세션을 생상하는 다른 방법

- request.getSession() :

HttpSession을 생성하는 방법은 request 기본 객체의 getSession() 메소드를 사용하는 방법이다.

request.getSession() 메소드는 현재 요청과 관련된 session 내장객체를 반환한다.

request.getSession() 메소드는 세션이 생성되어 있으면 생성된 세션을 반환하고, 생성되어 있지 않으면 새롭게 세션을 생성해서 반환한다.

<%@ page session="false" %>
<%
	HttpSession httpSession = request.getSession();
    List list = (List)httpSession.getAttribute("list");
    list.add(productId);
%>

- <%@page session-"true"%>를 이용한 세션 생성

 : page 디렉티브 태그 내 session 속성의 기본 값이 true이므로 session 속성의 값을 false로 지정하지만 않으면 세션이 생성된다. 일단 세션이 생성되면 session 내장 객체를 통해 세션을 사용할 수 있다.

<%@ page session = "true" %>
<%
	~~~~
    session.setAttribute("userInfo",userInfo);
    ~~~~
%>

- 세션 정보

 : 세션의 정보를 얻기 위해서는 session 내장 객체의 메소드인 getAttribute(), getAttributeNames() 를 사용한다.

 

# 단일 세션 정보 얻기

세션에 저장된 하나의 세션 속성 이름을 얻어오려면 getAttribute() 메소드를 사용한다. 여기서 주의해야 할 점은

해당 메소드는 반환 유형이 Object 타입 이므로 반드시 형 변환 해야한다.

Object getAttribute(String name) ==> String id = (String)session.getAttricbute("memberID");

getAttribute() 메소드는 반환 유형이 Object 유형이므로 memberID값이 String 형이라면 cast 연산자인 (String)을 사용하여 형 변환 해야한다. 만약 세션에 memberID가 저장되어 있지 않으면 null을 반환한다.

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" language="java"%>
<html>
<head>
<title>Session</title>
</head>
<body>
	<%
		String user_id = (String)session.getAttribute("userID");
		String user_passwd = (String)session.getAttribute("userPW");
		
		out.println("설정된 세션의 속성 값 [1] : " + user_id + "<br>");
		out.println("설정된 세션의 속성 값 [2] : " + user_passwd);
	%>
</body>
</html>

 

# 다중 세션 정보 얻기

 : 여러 개의 세션 속성 이름에 대한 속성 값을 얻기 위해서는 getAttributeNames() 메소드를 사용해야 한다.

해당 메소드의 반환 타입은 Enumeration 객체 타입이므로 모든 세션 정보를 얻어오는데 유용하다.

Enumeration 객체를 사용하려면 JSP페이지에 page 디렉티브 태그에 import 해야한다.

Enumeration getAttributeNames();  ==>

Enumeration enum = session.getAttributeNames();

while(enum.hasMoreElements()){
	String name = enum.nextElement().toString();
    String value = session.getAttribute(name).toString();
}
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" language="java"%>
<%@ page import="java.util.Enumeration" %>
<html>
<head>
<title>Session</title>
</head>
<body>
	<%
		String name, value;
		Enumeration en = session.getAttributeNames();
		int i = 0;
		while(en.hasMoreElements()){
			i++;
			name = en.nextElement().toString();
			value = session.getAttribute(name).toString();
			out.println("설정된 세션의 속성 이름 [" +i+" ] : " + name + "<br>");
			out.println("설정된 세션의 속성 값 [" +i+" ] : " + value + "<br>");
		}
	%>
</body>
</html>

 

- 세션 삭제

 : 세션을 더 유지할 필요가 없으면 session 내장 객체의 removeAttribute() , invalidate() 메소드를 사용하여 삭제한다.

세션이 삭제되면 사용 중인 session 내장 객체가 삭제 되므로 session 내장 객체에 저장된 모든 속성이 삭제된다.

 

# 단일 세션 삭제하기

 : 하나의 세션 속성을 삭제하라면 removeAttribute() 메소드를 사용한다.

void removeAttribute(String name); ==> session.removeAttribute("memberId");

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" language="java"%>
<html>
<head>
<title>Session</title>
</head>
<body>
	<h4>----세션을 삭제하기 전----</h4>
	<%
		String user_id = (String)session.getAttribute("userID");
		String user_passwd = (String)session.getAttribute("userPW");
		out.println("설정된 세션의 속성 값 [1] : " + user_id + "<br>");
		out.println("설정된 세션의 속성 값 [2] : " + user_passwd);
		
		session.removeAttribute("userID");
	%>
	<h4>----세션을 삭제 한 후----</h4>
	<%
		user_id = (String) session.getAttribute("userID");
		user_passwd = (String) session.getAttribute("userPW");
		out.println("설정된 세션의 속성 값 [1] : " + user_id + "<br>");
		out.println("설정된 세션의 속성 값 [2] : " + user_passwd);
	%>
</body>

 

# 다중 세션 삭제하기

 : 세션에 저장된 모든 세션 속성 이름을 삭제하려면 invalidate() 메소드를 사용한다.

void invalidate() ==> session.invalidate();

 

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" language="java"%>
<html>
<head>
<title>Session</title>
</head>
<body>
	<h4>----세션을 삭제하기 전----</h4>
	<%
		String user_id = (String)session.getAttribute("userID");
		String user_passwd = (String)session.getAttribute("userPW");
		out.println("설정된 세션의 속성 값 [user_id] : " + user_id + "<br>");
		out.println("설정된 세션의 속성 값 [user_passwd] : " + user_passwd + "<br>");
		
		if(request.isRequestedSessionIdValid() == true){
			out.print("세션이 유효");
		} else {
			out.print("세션이 유효하지 않음");
		}
		session.invalidate();
	%>
	<h4>----세션을 삭제 한 후----</h4>
	<%
		if(request.isRequestedSessionIdValid() == true){
			out.print("세션이 유효");
		} else {
			out.print("세션이 유효하지 않음");
		}
	%>
</body>
</html>

- 세션 유효 시간 설정

: 세션 유효 시간은 세션을 유지하기 위한 세션의 일정 기간이다.

웹 브라우저를 접근한 후 일정 시간 이내에 다시 접근 하지 않으면 자동으로 세션이 종료된다.

세션 유효시간을 설정하기 위해 session 내장 객체의 setMaxInactiveInterval() 메소드를 사용한다.

void setMaxInactiveInterval(int interval) 

session.setMaxInactiveInerval(60*60);
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" language="java"%>
<html>
<head>
<title>Session</title>
</head>
<body>
	<h4>===== 세션 유효 시간 변경 전 =====</h4>
		<%
		int time = session.getMaxInactiveInterval() / 60;
		out.println("세션 유효 시간 : " + time + "분<br>");
		%>
	<h4>===== 세션 유효 시간 변경 전 =====</h4>
	<%
		session.setMaxInactiveInterval(60*60);
		time = session.getMaxInactiveInterval() / 60;
		out.println("세션 유효 시간 : " + time + "분<br>");
	%>
</body>
</html
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" language="java"%>
<html>
<head>
<title>Session</title>
</head>
<body>
	<%
		String session_id = session.getId();
		long last_time = session.getLastAccessedTime();
		long start_time = session.getCreationTime();
		long used_time = (last_time - start_time) / 60000;
	
		out.println("세션 아이디 : " + session_id + "<br>");
		out.println("요청 시작 시간 : " + start_time + "<br>");
		out.println("요청 마지막 시간 : " + last_time + "<br>");
		out.println("웹 사이트 경과 시간 : " + used_time + "<br>");
	%>
</body>
</html>

 

<출처 : 쉽게배우는 jsp 웹 프로그래밍>

 

 

 

 

'학교공부 > JSP' 카테고리의 다른 글

JDBC  (0) 2021.06.13
chapter - 14 (cookie)  (0) 2021.05.17
JSP - 8  (0) 2021.04.17
JSP - 10  (0) 2021.04.15
JSP - 9  (0) 2021.04.06
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함