세션

조수경·2022년 1월 18일
0

JSP

목록 보기
34/45
post-thumbnail

session.setAttribute
session.getAttribute
session.invalidate

세션이란?

  • 서버 세션을 사용하면 클라이언트의 상태를 저장할 수 있음
  • 쿠키와의 차이점은 세션은 웹 브라우저가 아닌 서버에 값을 저장한다는 점
  • 웹 컨테이너(톰캣)에서 클라이언트의 정보를 보관 및 상태를 유지할 때 사용
  • 로그인한 사용자 정보를 유지하기 위한 목적
  • 클라이언트마다 세션이 생성
    웹 브라우저(크롬)에 정보 보관(저장) : 쿠키
    웹 컨테이너(톰캣)에 정보 보관(저장) : 세션

크롬과 엣지에서 로그인할 경우 두 세션은 다르다.

세션이 생성되는 원리 : 웹브라우저에 주소를 입력하는 순간 세션이 만들어짐
구분할 수 있으려면 구분이 가능해야하며 웹브라우저 사이에서도 다른 아이디로 있어야 함

같은 브라우저 일 때 세션 아이디가 같으면 탭1과 탭2의 세션 아이디가 같다.

세션 이용 방법

  1. 웹 클라이언트가 서버에게 요청을 보내면 서버는 클라이언트를 식별하는 session id를 생성
  2. 서버는 session id로 key와 value를 저장하는 HttpSession을 생성하고 session id를 저장하고 있는 쿠키를 생성하여 클라이언트에게 전송한다.
  3. 서버는 쿠키의 session id로 HttpSession을 찾는다.
  1. 세션 생성 및 얻기
HttpSession session = request.getSession();
HttpSession session = request.getSession(true);

request의 getSession()메서드는 서버에 생성된 세션이 있다면 세션을 반환하고, 없다면 새 세션을 생성하여 반환한다. (인수 default가 true)

새롭게 생성된 세션인지는 HttpSession의 isNew() 메서드로 알 수 있다.

HttpSession session = request.getSession(false);

request의 getSession()메서드의 파라미터로 false를 전달하면, 이미 생성된 세션이 있을때 그 세션을 반환하고, 없으면 null을 반환한다.

  1. 세션에 값 저장하기
setAttribute(String name, Object value)

setAttribute는 name, value 쌍으로 객체 Object를 저장하는 메서드이다.

세션이 유지되는 동안 저장된다.

session.setAttribute(이름, 값)

이렇게 사용할 수 있다.

  1. 세션 값 조회하기
getAttribute(String naem)

getAttribute 메서드로 세션에 저장된 값을 조회할 수 있다.
리턴 타입은 Object이므로 형변환이 필요하다
메서드 setAttribute에 이용한 name을 알고 있으면 다음과 같이 조회 가능

String value = (String)session.getAttribute("name");
  1. 세션 값 삭제하기
removeAttribute(String name)

removeAttribute 메서드로 name값에 해당하는 세션 정보를 삭제할 수 있다

invalidate()

invalidate로 모든 세션 정보를 한번에 삭제할 수 있다.

sessionInfo.jsp

<title>세션 정보</title>
</head>
<body>
<%
    //long 타입의 시간 값을 저장하기 위해 사용
	Date time = new Date();

	SimpleDateFormat formatter = 
		new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

%>
	세션ID : <%=session.getId()%> <br />
<%
	//세션의 생성 시간을 Date 객체인 time에 저장
	time.setTime(session.getCreationTime());
%>
	세션생성기간 : <%=formatter.format(time)%> <br />
<% 
  //세션의 마지막 접근 시간(long)->Date 타입으로 세팅
  time.setTime(session.getLastAccessedTime());
%>
	최근접근시간 : <%=formatter.format(time)%> <br />
</body>

다른 브라우저에서 실행했을 경우 세션ID가 다르다.
->세션은 웹 브라우저가 아닌 서버에 값을 저장하기 때문!!

setMemberInfo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
	session.setAttribute("MEMBERID", "ddit");
	session.setAttribute("NAME", "개똥이");
%>
<!DOCTYPE html>
<html>
<head>

<title>Insert title here</title>
</head>
<body>
세션에 정보를 저장했습니다. <br />
<a href="getMemberInfo.jsp">저장된 세션의 정보 보기</a>
</body>
</html>

getMemberInfo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
	String memberId = (String)session.getAttribute("MEMBERID");  //ddit
	String name = (String)session.getAttribute("NAME"); //개똥이
%>
<!DOCTYPE html>
<html>
<head>

<title>저장된 세션의 정보 확인</title>
</head>
<body>
회원id : <%=memberId%><br />
회원이름 : <%=name%><br />
<a href="setMemberInfo.jsp">되돌아가기</a>
</body>
</html>

profile
신입 개발자 입니다!!!

0개의 댓글