#Session(세션) 사용 방법(쿠키vs세션 차이점)
#세션
-서버에서 사용자의 정보(상태)를 저장한다.
-쿠키와 같이 서버와의 관계를 유지하기 위한 수단이다.
-클라이언트의 요청이 발생하면 자동 생성된다.
-쿠키와 달리 클라이언트의 특정 위치에 저장되는 것이 아니라, 서버 상에 객체로 존재한다.
-쿠키와 달리 서버에서만 접근이 가능하여 보안이 좋다.
-Session의 영역상 브라우저의 X 버튼을 누를 때까지 유지된다.
-e.g.) 로그인 정보나 사용자 환경설정, DB커넥션 등 정보를 유지하는 것들에 사용된다.
#페이지 내에서 세션의 기본 값
<%@ page session = "true" %>
#세션 관련 메서드
메서드 | 설명 |
setAttribute(String attrName, Object attrValue) | 세션에 데이터를 저장한다. |
getAttribute(String attrName) | 세션에서 파라미터로 지정된 이름의 속성 데이터 값을 얻는다. |
getAttributeNames() | 세션에 저장되어 있는 모든 데이터의 이름 (유니크한 키 값)을 얻는다. |
getId() | 자동 생성된 세션의 유니크한 아이디를 얻는다. (각 브라우저에 해당하는 값) |
isNew() | 세션이 최초 생성되었는지, 이전에 생성된 세션인지를 구분한다. |
setMaxInactiveInterval(int second) | 세션의 유효시간을 설정한다. |
getMaxInactiveInterval() | 세션의 유효시간을 얻는다. 가장 최근 요청시점을 기준으로 카운트 된다. |
removeAttribute(String attrName) | 세션에서 특정 데이터(파라미터 값)제거. (세션을 제거하는 것이 아니라 값을 삭제한다.) |
invalidate() | 세션의 모든 데이터를 삭제한다. |
메서드 | 설명 |
getCreationTime() | 세션이 생성된 시간을 구한다. 시간은 1970년 1월 1일 이후 흘러간 시간을 의미하며, 단위는 1/1000초이다. |
getLastAccessedTime() | 웹 브라우저가 가장 마지막에 세션에 접근한 시간을 구한다. 시간은 1970년 1월 1일 이후 흘러간 시간을 의미하며, 단위는 1/1000초이다. |
#세션 종료 invalidate()
-바로 소멸시킨다는 의미가 아니다.
-아이디 값을 제외한 나머지 정보를 접근할 수 없다.
-invalidate() 후 세션의 아이디 값은 받아 올 수 있지만 나머지 정보나 속성 등은 접근할 수가 없다.
(아이디 값을 받아 올 수 있다는 의미는 현재 페이지에서 세션이 사라진 것은 아니다.
-session.getSession() 메서드를 사용해서 다음 페이지에 얻어 와야 하는 세션을 미리 얻어올 수 있다.
#request.getSession()
-HttpSession을 생성하는 방법
-현재 요청과 관련된 session객체를 리턴한다.
-request.getSession()메서드는 session이 존재하면 해당 session을 리턴하고 존재하지
않으면 새롭게 session을 생성해서 리턴한다.
-getSession() == getSession(true)
-getSession(false) -> 기본에 session이 있으면 가져오고 없으면 null을 리턴한다.
#session.removeAttribute();
-invalidate()와 삭제하는 효과는 같지만 깔끔하게 invalidate() 쓰는 게 낫다.
#세션의 유효시간을 설정하는 2가지 방법
-session.getLastAccessedTime() : 접근시간을 가져온다.
-지정한 유효시간 동안 요청이 없다면 자동 종료된다.
1. 첫 번째 방식(web.xml 설정 파일) - 단위(분)
<session-config>
<session-timeout>30</session-timeout>
</session-config>
2. 두 번째 방식(메서드 방식)- 단위(초)
<%
session.setMaxInactiveInterval(60 * 60)
%>
-<session-timeout>의 값을 0이나 음수로 설정하면 유효시간 없이 무제한으로 유지한다.
-단점은 세션 객체가 계속 메모리에 남게 되어 메모리 부족 현상이 발생한다.
★반드시 세션 타임아웃 시간을 지정해주어야 한다.
#쿠키 vs 세션 차이점
쿠키 | 세션 | |
생성위치 | 클라이언트 | 서버 |
보안 | 약함 | 강함 |
공유여부 | 여러 서버에서 공유가능 | 여러 서버에서 공유 불가 |
저장공간 | 저장할 수 있는 데이터가 제한적이다. | 저장할 수 있는 데이터가 제한적이지 않다. |
예제 1)
1. 시작 화면
2. 결과 화면
1.sessionTest.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>세션 생성</title>
</head>
<body>
<%
session.setAttribute("abc", 123);
session.setAttribute("name", "kim");
%>
<a href="sessionGet.jsp">세션값 확인</a>
</body>
</html>
2.sessionGet.jsp
<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>세션 확인</title>
</head>
<body>
<%
Object obj1 = session.getAttribute("abc");
Integer intValue = (Integer)obj1;
out.println("abc : " + intValue);
Object obj2 = session.getAttribute("name");
String StringValue = (String)obj2;
out.println("name : " + StringValue);
%>
<br/>
<%
String sName;
String sValue;
Enumeration<String> en = session.getAttributeNames();
// 브라우저상에는 아래의 세션에서 설정한 값들은 보이지 않는다.(보안상)
while(en.hasMoreElements()){
sName = en.nextElement();
sValue = session.getAttribute(sName).toString();
out.println("세션 이름 : " + sName + "<br/>");
out.println("세션 값 : " + sValue + "<br/>");
}
out.println("===============================<br/>");
// 세션 아이디
String sessionID = session.getId();
out.println("sessionID : " + sessionID + "<br/>");
// 세션 유효시간(초 단위)
int sessionInterval = session.getMaxInactiveInterval();
out.println("세션 유효 시간 : " + sessionInterval + "초" + "<br/>");
out.println("===============================<br/>");
// 세션 특정 데이터 삭제
session.removeAttribute("abc");
Enumeration<String> en1 = session.getAttributeNames();
while(en1.hasMoreElements()){
sName = en1.nextElement();
sValue = session.getAttribute(sName).toString();
out.println("세션 이름 : " + sName + "<br/>");
out.println("세션 값 : " + sValue + "<br/>");
}
out.println("===============================<br/>");
// 세션의 모든 데이터 삭제
session.invalidate();
// 유효한 세션 아이디 존재 여부
if(request.isRequestedSessionIdValid()){
out.print("session valid");
}else{
out.print("session Invalid");
}
%>
</body>
</html>
'IT > JSP' 카테고리의 다른 글
[JSP] - 30. 이클립스에서 JUnit 단위 테스트 하는 방법 (0) | 2020.08.08 |
---|---|
[JSP] - 29. 서블릿(Servlet) 이란 (0) | 2020.07.28 |
[JSP] - 27. Cookie(쿠키) [생성, 추가, 삭제] 하는 방법 (0) | 2020.07.27 |
[JSP] - 26. 자바 빈(JavaBeans), <jsp:useBean> 액션 태그 사용법 (0) | 2020.07.27 |
[JSP] - 25. <jsp:forward> 액션 태그 사용법 (0) | 2020.07.25 |
댓글