Session



세션 타임 설정을 위한 두가지 방법 

1. web.xml에 직접 설정하는 방법 

1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" ... version="2.5">
  ...
  ...
  ...
  <session-config>
    <session-timeout>100</session-timeout<!-- 분단위  -->
  </session-config>
</web-app>
cs

2. jsp 페이지에 임의로 설정

1
2
3
<%
  session.setMaxInactiveInterval(100 * 60); //  단위
%>
cs

 

아직 db에 대한 학습을 하지 않앟기때문에 web.xml에 임의로 저장하여 활용

 web.xml에 파라미터로써 로그인 ID와 Password를 저장하고 활용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
               http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  version="2.5"
 <!-- 기존 내용  -->
 <!-- 아래의 내용만 삽입  -->
 <context-param>
   <param-name>MasterID</param-name>
   <param-value>jspbook</param-value>
 </context-param>
 <context-param>
   <param-name>MasterPassword</param-name>
   <param-value>112233</param-value>
 </context-param>
 <!-- 삽입 끝  -->
 
</web-app>
cs


login.html

1
2
3
4
5
6
7
8
9
10
11
12
13
 <html>
 <head>
  <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
  <title>로그인</title></head>
 </head>
 <body>
관리자  (Master)로 로그인하세요.<br/>
 <form action="loginProcess.jsp" method="post">
 ID : <input type="text" name="id"><br/>
 Password : <input type="password" name="pw"><br/>
 <input type="submit" value="전송">
 </body>
 </html>
cs

loginProcess.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
<%@ page contentType="text/html;charset=utf-8" %>
<%
 String storedID = application.getInitParameter("M
asterID");  
 String storedPW = application.getInitParameter("M
asterPassword");  
 String id = request.getParameter("id");
 String pw = request.getParameter("pw");
 if (id.equals(storedID) && pw.equals(storedPW)) { 
   session.setAttribute("MasterLoginID", id); 
%>
<html>
<head><title>로그인 처리</title></head>
<body>
로그인에 성공했습니다. <br/><br/>
<a href="loginCheck.jsp">로그인 체크</a>
</body>
</html>
<%
 } else if (id.equals(storedID)) { 
%>
<script>
alert("패스워드가 다릅니다.");  
history.go(-1);
</script>
<%
 } else {  
%>
<script>
alert("로그인  ID가 다릅니다.");
history.go(-1);
</script>
<%
 }
%>
cs

※ 대부분의 JSP 페이지 및 Servlet은 session 기본 객체를 사용하게 된다. 따라서 로그인과관련된 코딩이 없어도 session 기본 객체는 이미 생성되며 session 기본 객체의 생성 시점

로그인 성공 시점은 일치하지 않는다는 점에 유의해야 한다. 이는 곧 사용자가 로그아웃

하더라도 기존의 session 기본 객체는 계속 유지될 수 있다는 것을 의미한다.


로그인 지속 여부 판단

로그인이 되어 있다는 것을 판단하는 방법은 session 기본 객체에 로그인 표식을 위한 속성

이 존재하는지의 여부를 판단하는 것으로 이루어진다.

loginCheck.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
<%@ page contentType="text/html;charset=utf-8" %>
<%
 String masterID = (String)session.getAttribute("M
asterLoginID");
 boolean isLogin = false;
 if (masterID !null) {
   isLogin = true; 
 }
%>
<html>
<head><title>로그인여부 검사</title></head>
<body>
<%
   if (isLogin) {
%>
ID "<%masterID %>"로 로그인 한 상태  <br/><br/>
<a href="logout.jsp">로그아웃</a>
<%
   } else {
%>
로그인하지 않은 상태
<%
   }
%>
</body>
</html>
cs

로그아웃 처리 logout.jsp

session.invalidate() 메소드를 통해 세션을 종료하면 된다 

1
2
3
4
5
6
7
8
9
10
11
<%@ page contentType="text/html;charset=utf-8" %>
<%
 session.invalidate();
%>
<html>
<head><title>로그아웃</title></head>
<body>
로그아웃하였습니다. <br/><br/>
<a href="login.html">처음부터</a>
</body>
</html>
cs

아래와 같이 세션에서 객체 속성을 삭제하는 방법으로도 처리 가능 

1
session.removeAttribute("MasterLoginID");
cs



로그인 처리를 위해 쿠키 대신에 세션을 사용하는 이유는?

쿠키는 클라이언트에도 정보가 저장되서 관리가 어렵지만 세션을 이용하면 서버에서만 데이터를 관리하면 되기때문에 관리가 용이하고 보안 측면에서 더 강화된다 



Cookie

쿠키(cookie)는 인터넷 사용자가 어떠한 웹 사이트를 방문할 경우 그 사이트가 사용하고 있

는 서버에서 인터넷 사용자의 컴퓨터에 설치하는 작은 기록 정보 파일을 일컫는다. 쿠키에

담긴 정보는 인터넷 사용자가 같은 웹 사이트를 방문할 떄마다 읽혀서 서버로 전송되고 새로운정보로 바뀔 수도 있다.



두 번째 인자로서 쿠키의 값을 지정

Cookie 객체의 멤버 메소드

Cookie의 생성 및 활용

1
2
3
4
<%
  Cookie cookie = new Cookie("cookieName", "cookieValue");
  response.addCookie(cookie);
%>
cs

Cookie 클래스 생성자의 첫 번째 인자로서 쿠키의 이름을, 두 번째 인자로서 쿠키의 값을 지정

createCookie.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!-- createCookie.jsp -->
<%@ page contentType="text/html;charset=utf-8" %>
<%@ page import="java.net.URLEncoder" %>
<%@ page import="java.util.Date" %>
<%
    Cookie cookie = new Cookie("name", URLEncoder.encode("jspbook 쿠키 테스트"));
    Cookie cookie2 = new Cookie("date", new Date().toString());
    response.addCookie(cookie);
    response.addCookie(cookie2);
%>
<html>
<head><title>쿠키생성</title></head>
<body>
쿠키 이름: <%cookie.getName() %><br/>
쿠키 값: <%cookie.getValue() %><br/>
<br/>
쿠키 이름: <%cookie2.getName() %><br/>
쿠키 값: <%cookie2.getValue() %>
<p><a href="getCookies.jsp">Next Page to view the cookie value</a></p>
</body>
</html>
cs

실행화면





쿠키 생성 및 응답전송 단계: JSP를 활용하여 서버 측에서 쿠키를 생성한다. 이렇게 생성

된 쿠키는 응답 데이터와 함께 브라우저로 전송된다.

쿠키 저장 단계: 웹 브라우저는 응답 데이터에 포함된 쿠키를 쿠키 저장소에 보관한다. 

대부분의 경우 하드디스크의 파일 형태로 저장된다.

쿠키 요청전송 단계: 한번 저장된 쿠키는 웹 브라우저에서 서버로 요청을 보낼 때마다 함

께 전송된다. 웹 서버는 웹 브라우저가 전송한 쿠키에서 필요한 데이터를 읽어서 필요한 

작업을 수행할 수 있다.

쿠키의 전송은 1)응답전송과 2)요청전송으로 나뉜다는 점유의하자. 응답전송은 서버가 

생성된 후 서버에서 브라우저로 한 번만 일어난다. 하지만 요청전송은 일단 웹 브라우저에 

쿠키가 저장되면 쿠키가 삭제되기 전까지 매번 웹 서버에 전송된다. 그러므로 쿠키를 활용

해서 지속적으로 브라우저로부터 데이터를 받아낼 수 있으며, 브라우저를 닫은 이후에 다시 

브라우저를 열어서 해당 사이트로 접속할 때에도 전송된다는 점에 유의하자. 


서버 측에서 전송받은 쿠키의 데이터 읽어오기

Cookie[] cookies = request.getCookies();

getCookies.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 contentType="text/html;charset=utf-8" %>
<%@ page import="java.net.URLDecoder" %>
<html>
<head><title>쿠키 목록</title></head>
<body>
쿠키 목록<br/>
<%
   Cookie[] cookies = request.getCookies();
   if (cookies !null && cookies.length > 0) {
       for (int i = 0 ; i < cookies.length ; i++) {
%>
<%cookies[i].getName() %>=<%URLDecoder.decode(c
ookies[i].getValue()) %><br/>
<%
       }
   } else {
%>
전송 받은 쿠키가 없습니다.
<%
   }
%>
</body>
</html>
cs

※ 쿠키 값이 인코딩되었을 가능성이 있으므로 URLDecorder.decode( ) 메소드를 활용해서 쿠키 값을 디코딩하는 메소드를 활용하면서 쿠키 값을 얻어와야 한다.

쿠키삭제 

아래와같은 방법으로 쿠키 삭제 

1
2
cookie.setMaxAge(0);
response.addCookie(cookie);
cs


deleteCookies.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<%@ page contentType="text/html;charset=utf-8" %>
<%@ page import = "java.net.URLEncoder" %>
<%
 Cookie[] cookies = request.getCookies();
   if (cookies !null && cookies.length > 0) {
       for (int i = 0 ; i < cookies.length ; i++) {
           if (cookies[i].getName().equals("name
")) {
               cookies[i].setMaxAge(0);
               response.addCookie(cookies[i]);
           }
       }
   }
%>
<html>
<head><title>쿠키 삭제</title></head>
<body>
name 쿠키를 삭제합니다.
<p><a href="getCookies.jsp">Next Page to view the c
ookie value</a></p>
</body>
</html>
cs


쿠키의 유효 시간을 지정하지 않은 경우 웹 브라우저를 닫으면 쿠키는 자동으로 삭제되며 이후에 웹 브라우저를 실행할 때에 지워진 쿠키는 서버로 요청전송되지 않는다. 쿠키의효 시간을 설정하면 웹 브라우저를 닫더라도 유효 시간이 남아 있으면 해당 쿠키가 삭제되지 않고 이후 요청전송될 수 있다.


create1hourCookie.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 <%@ page contentType="text/html;charset=utf-8" %>
 <%
    Cookie cookie = new Cookie("cookieTime", "1 hour");
    cookie.setMaxAge(60 * 60); 
    response.addCookie(cookie);
 %
 
<html>
<head><title>쿠키유효시간설정</title></head>
<body>
유효시간이  1시간인  cookieTime 쿠키 생성.
<p><a href="getCookies.jsp">Next Page to view the c
ookie value</a></p>
</body>
</html>
cs


쿠키를 이용한 ID 기억하기 구현


login2.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
 <%@ page contentType="text/html;charset=utf-8" %>
 <html>
 <head><title>로그인</title></head>
 <%
  boolean isIDShow = false;
  String id = null;
  Cookie[] cookies = request.getCookies();
  if (cookies !null && cookies.length > 0) {
    for (int i = 0 ; i < cookies.length ; i++) {
      if (cookies[i].getName().equals("id")) {
       isIDShow = true;
       id = cookies[i].getValue();
      }
    }
  }
 %>
 <body>
관리자  (Master)로 로그인하세요.<br/>
 <form action="loginProcess2.jsp" method="post">
 <%
  if (isIDShow) {
 %>
 ID : <input type="text" name="id" value="<%= id %>">
 <input type="checkbox" name="idstore" value="store" 
checked>ID 기억하기
 </input><br/>
 <%
  } else {
 %>
 ID : <input type="text" name="id">
 <input type="checkbox" name="idstore" value="store
">ID 기억하기</input><br/>
 <%
  }
 %>
cs

login2.jsp는 간단한 로그인 폼 생성 페이지이지만 브라우저로부터 전송된 쿠키 정보 중 "id" 이름의 쿠키가 있는지 확인하여 그 쿠기가 있다면 ID 정보를 폼 입력에 미리 넣어주는 역할을 한다

loginProcess2.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
<%@ page contentType="text/html;charset=utf-8" %>
<%
 String storedID = application.getInitParameter("M
asterID");  
 String storedPW = application.getInitParameter("M
asterPassword");  
 String id = request.getParameter("id");
 String pw = request.getParameter("pw");
 if (id.equals(storedID) && pw.equals(storedPW)) { 
   session.setAttribute("MasterLoginID", id);
%>
<html>
<head><title>로그인 처리</title></head>
<body>
로그인에 성공했습니다. <br/><br/>
<a href="loginCheck.jsp">로그인 체크</a
</body>
</html>
<%
   String IDStore = request.getParameter("idstore");
    if (IDStore !null && IDStore.equals("store")) 
{
      Cookie cookie = new Cookie("id", id);
      response.addCookie(cookie);
     out.println("<a href='login2.jsp'>로그인 화면 다
시 보기</a>");
   }
 } else if (id.equals(storedID)) { 
%>
<script>
alert("패스워드가 다릅니다.");  
history.go(-1);
</script>
<%
 } else {
%>
<script>
alert("로그인  ID가 다릅니다.");
history.go(-1);
</script>
<%
 }
%
gcs

getInitParameter 와 getParameter 차이점

getInitParameter 

 web.xml 에다가 지정해둔 파라미터들의 값을 얻어 올수 있다.. 불변의 값들을 미리 xml 에다가 적어놓구 필요할때마다 호출해서 사용

getParameter 

리퀘스트 범위내에서 Parameter 값을 얻어오는 것. 전의 페이지에서 값을 넘겨주면 이 메소드를 활용하여 값ㅇ르 받아온다 


※ setPath() 메소드의 일반적인 활용법

일반적으로 쿠키는 웹 애플리케이션에 포함된 대부분의 JSP, 서블릿에서 공통으로 사용되는 

경우가 많기 때문에 대부분의 쿠키는 경로를 “/”로 지정한다. 즉, 생성된 쿠키가 cookie라면 

cookie.setPath("/")를 호출하면 된다. 

'Java > Servlet, JSP' 카테고리의 다른 글

HTTP 프로토콜의 이해  (0) 2014.11.05

HTTP 프로토콜: 웹 브라우저와 웹 서버 사이의 데이터 통신 규칙

'Java > Servlet, JSP' 카테고리의 다른 글

스터디 11장 정리 - 세션과 쿠키  (0) 2015.01.07

+ Recent posts