세션
- Session -
웹브라우저와 서버와의 관계를 유지하기 위한 수단으로 쿠키와 세션이 있다.
쿠키는 클라이언트의 특정 위치에 저장되고
세션은 서버상에 객체로 저장된다는 차이점이 있다.
세션은 서버에서만 접근이 가능하기 때문에 보안성이 좋고 저장할 수 있는 데이터의 한계가 없다.
- 세션 관련 메소드 -
setAttribute() : 세션에 데이터를 저장한다.
getAttribute() : 세션에서 데이터를 얻는다.
getAttributeNames() : 세션에 저장되어 있는 모든 데이터의 이름(키값)을 얻는다. (Enumeration 타입으로 주로 받음)
getID() : 자동 생성된 세션의 유니크한 아이디를 얻는다.
isNew() : 세션이 최초 생성되었는지 이전에 생성된 세션인지를 판별한다.
getMaxInactiveInterval() : 세션의 유효시간을 얻는다. 가장 최근 요청시점을 기준으로 카운트된다.
server파일 내의 web.xml 파일에서 변경 가능하다.
removeAttribute() : 세션에서 특정 데이터를 삭제한다.
Invalidate() : 세션의 모든 데이터를 삭제한다.
<sessionInit.jsp>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <!DOCTYPE html> <html> <head> <meta charset="EUC-KR"> <title>Insert title here</title> </head> <body> <% session.setAttribute("mySessionName", "mySessionData"); session.setAttribute("myNum", 12345); %> <a href="sessionGet.jsp">session Get</a> </body> </html> | cs |
"mySessionData"라는 문자열 데이터가 저장된 "mySessionName" 이름의 세션과
12345 라는 정수형 데이터가 저장된 "myNum" 이름의 세션을 저장한다.
<sessionGet.jsp>
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | <%@ 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>Insert title here</title> </head> <body> <% Object ob1 = session.getAttribute("mySessionName"); String mySessionName = (String)ob1; out.println(mySessionName +"<br/>"); Object ob2 = session.getAttribute("myNum"); Integer myNum = (Integer)ob2; out.println(myNum +"<br/>"); out.println("****************<br/>"); String sName; String sValue; Enumeration enumeration = session.getAttributeNames(); //열거형 데이터타입 while(enumeration.hasMoreElements()) { sName = enumeration.nextElement().toString(); sValue = session.getAttribute(sName).toString(); out.println("sName : "+sName+"<br/>"); out.println("sValue : "+sValue+"<br/>"); } out.println("******************<br/>"); String sessionID = session.getId(); //세션의 고유한 아이디값 out.println("sessionID : "+sessionID+"<br/>"); int sessionInter = session.getMaxInactiveInterval(); //세션의 유효시간 (기본설정:30분) out.println("MaxInactiveInterval : "+sessionInter+"<br/>"); out.println("******************<br/>"); session.removeAttribute("mySessionName"); Enumeration enumeration1 = session.getAttributeNames(); while(enumeration1.hasMoreElements()){ sName = enumeration1.nextElement().toString(); sValue = session.getAttribute(sName).toString(); out.println("sName : " +sName+ "<br/>"); out.println("sValue : " +sValue+ "<br/>"); } out.println("*******************<br/>"); session.invalidate(); if(request.isRequestedSessionIdValid()) { //유효한 세션아이디가 있나? out.println("session Valid"); }else { out.println("session Invalid"); } %> </body> </html> | cs |
<Login.html>
html의 폼태그로 간단하게 아이디와 비밀번호 입력을 받도록 구성해보았다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <!DOCTYPE html> <html lang="ko"> <head> <meta charset="EUC-KR"> <title>Login in session</title> </head> <body> <form action="loginOK.jsp" method="post"> 아이디 : <input type="text" name="id" size="10"><br/> 비밀번호 : <input type="password" name="pw" size="10"><br/> <input type="submit" value="로그인"> </form> </body> </html> | cs |
<loginOK.jsp>
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 | <%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <!DOCTYPE html> <html> <head> <meta charset="EUC-KR"> <title>Insert title here</title> </head> <body> <%! String id, pw; %> <% id = request.getParameter("id"); pw = request.getParameter("pw"); if(id.equals("abcde") && pw.equals("12345")) { session.setAttribute("id", id); response.sendRedirect("welcome.jsp"); } else { response.sendRedirect("Login.html"); } %> </body> </html> | cs |
<welcome.jsp>
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 | <%@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>Insert title here</title> </head> <body> <% Enumeration enumeration = session.getAttributeNames(); int i = 0; while(enumeration.hasMoreElements()) { i++; String sName = enumeration.nextElement().toString(); String sValue = (String)session.getAttribute(sName); if(sValue.equals("abcde")) out.println(sValue + "님, 안녕하세요! <br/>"); } %> <a href="logout.jsp">로그아웃</a> </body> </html> | cs |
<logout.jsp>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <%@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>Insert title here</title> </head> <body> <% Enumeration enumeration = session.getAttributeNames(); while(enumeration.hasMoreElements()) { String sName = enumeration.nextElement().toString(); String sValue = (String)session.getAttribute(sName); if(sValue.equals("abcde")) session.removeAttribute(sName); } %> <a href="sessionTest.jsp">세션 테스트 페이지로</a> </body> </html> | cs |
<sessionTest.jsp>
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 | <%@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>Insert title here</title> </head> <body> <% // session.jsp 모든 세션을 찍어보는 파일입니다. Enumeration enumeration = session.getAttributeNames(); int i = 0; while(enumeration.hasMoreElements()) { i++; String sName = enumeration.nextElement().toString(); String sValue = (String)session.getAttribute(sName); out.println("sName : "+ sName + "<br/>"); out.println("sValue : " + sValue + "<br/>"); } if(i==0) out.println("모든 세션이 삭제되었습니다."); %> </body> </html> | cs |