1. 세션 트래킹이란?
세션이란 특정한 시점에서의 구간을 뜻하고, 세션 트래킹이란 요청된 세션을 찾아 주는 동작이다.
다시 말하자면, 세션 트래킹이란 사용했던 시점의 기록을 이용자에게 찾아줘서 상태를 유지시켜주는 것을 의미한다.
각각의 사용자에게 알맞은 상태를 전달하기 위해서 각 세션마다 세션 ID를 부여하고 서버에서 그 아이디를 보관한다.그렇다면 서로 다른 컴퓨터가 동일한 웹페이지에 접속해도 각각의 웹 브라우저는 다른 세션 ID를 부여받기 때문에 다른 정보가 뜰 것이고, 세션도 따로 유지된다.
2. session의 메소드
메소드 | 설명 |
void setAttribute(String name, Object value) | 주어진 "name"에 속성값인 value 저장 |
Object getAttribute(String name) | 주어진 "name"의 속성값을 반환 |
void removeAttribute(String name) | 주어진 "name"의 속성값을 제거 |
String getId() | 세션 고유 ID값을 문자열 반환 |
void setMaxInactiveInterval() | 세션 유지 시간을 초단위로 저장, default 값은 30분 |
int getMaxInactiveInterval() | 세션 유지 시간을 반환 |
void invalidate() | 현재 세션을 종료 및 제거 |
boolean isNew() | session 객체가 처음 생성되었을 경우에만 true 반환 |
session의 메소드를 정리하면 위와 같다.
session.setAttribute("문자열", 객체), session.getId() 와 같은 형식으로 사용하면 된다.
3. 세션을 이용해 ToDoList 만들어보기
-todoList.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="java.net.URLEncoder"%>
<%@ page import="java.util.*" %>
<html>
<body>
<h1>To Do List</h1>
<!-- todo목록을 입력할 HTML 폼 만들기 -->
<form action="todoList.jsp">
ToDo리스트 추가하기: <input type="text" name="task">
<input type="submit" value="Submit"><br>
</form>
<hr>
<!-- ToDo 목록 세션에 추가하기 -->
<%
// 예전에 만들어 놓은 세션이 있다면 그 세션의 값을 반환받음
List<String> todoList = (List<String>) session.getAttribute("mySession");
if(todoList == null){
// 세션의 반환값이 비어있다면 list를 새로 생성
todoList = new ArrayList<String>();
session.setAttribute("mySession", todoList);
}
// 폼에서 입력한 값을 request로 받아옴
String task = request.getParameter("task");
// ToDo리스트 추가하기에서 아무값도 입력하지 않았을 때를 예외처리
boolean isNotEmpty = (task != null) && (task.trim().length() > 0);
// ToDo리스트에 똑같은 값이 들어가는 것을 방지
boolean isNotDuplicate = (task != null) && (!todoList.contains(task.trim()));
if (isNotEmpty && isNotDuplicate) {
todoList.add(task.trim());
}
%>
<!-- 세션으로부터 정보 가져와서 사용자에게 보여주기 -->
<h2>ToDo 목록</h2>
<ol>
<%
for(String str: todoList) {
out.println("<li>" + str + "</li>");
}
%>
</ol>
</body>
</html>
4. 실행 및 결과 ( todoList.jsp 실행 )
브라우저 창을 닫고 서버를 다시 실행시켜도 세션트래킹이 정상적으로 되는지도 확인해보겠다.
브라우저 창을 닫고 다시 실행했지만, tomcat 서버에서 세션을 기억하고 있기때문에 값이 유지되어있다!!
지금까지는 구글 Chrome으로 실행했었는데
만약 다른 브라우저인 internet explorer로 연다면 똑같은 세션을 제공받을까?
브라우저에서는 세션 쿠키를 관리하는 기능이 있지만, 각 회사별 브라우저마다 따로 쿠키를 관리하기때문에
다른 세션을 제공받게 된다!!