**[세션객체를 가져오는 방법]**
HttpSession session = req.getSession(boolean 값);
boolean값 : true => 세션객체가 존재하지 않으면 새로 생성한다.
false => 세션객체가 존재하지 않으면 null을 리턴한다
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class T06_ServletSessionTest extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 세션을 가져오는데 없으면 새로운 객체로 생성한다
HttpSession session = **req.getSession(true);**
// true : 있으면 그거 주고 없으면 새로만들자!
//생성시간 가져오기
Date createTime = new Date(session.getCreationTime());
// 마지막 접근시간 가져오기
Date lastAccessTime = new Date(session.getLastAccessedTime());
String title = "재방문을 환영합니다";
int visitCount = 0; //재방문 횟수
String userId = "CSH"; //사용자 아이디
if(session.isNew()) { // 세션이 새로 만들어졌는지 확인
title="처음 방문을 환영합니다";
session.setAttribute("userId", userId); // 사용자 아이디 설정
} else {
visitCount = (Integer) session.getAttribute("visitCount");
visitCount++;
userId = (String) session.getAttribute("userId");
}
System.out.println("visitCount ; "+visitCount);
session.setAttribute("visitCount", visitCount);
// 응답헤더에 인코딩 및 Content Type 설정하기
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("<!doctype html><html><head><title>"+title
+ "</title></head><body>"
+ "<h1 align=\"center\">"+title+"</h1>"
+ "<h2 align=\"center\">세션정보</h2>"
+"<table border = \"1\" align=\"center\">"
+ "<tr bgcolor=\"orange\"><th>구분</th><th>값</th></tr>"
+ "<tr><td>세션ID</td><td>"+session.getId()+"</td></tr>"
+ "<tr><td>생성시간</td><td>"+createTime+"</td></tr>"
+ "<tr><td>마지막 접근시간</td><td>"+lastAccessTime+"</td></tr>"
+ "<tr><td>User ID</td><td>"+userId+"</td></tr>"
+ "<tr><td>방문횟수</td><td>"+visitCount+"</td></tr></table>"
+ "</body></html>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
super.doPost(req, resp);
}
}
새로고침시 방문횟수 늘어난다
이런게 자동 생성되어있네
JSESSIONID란?
**[세션 삭제 처리 방법]**
1. invalidate() 호출
2. setMaxInactiveInterval(int interval) 호출
=> 일정시간(초)동안 요청이 없으면 세션객체 삭제됨
3. web.xml에 <session-config> 설정하기. (분단위)
System.out.println("visitCount ; "+visitCount);
session.setAttribute("visitCount", visitCount);
**session.invalidate(); // 세션객체 제거**
새로고침 할때마다 세션ID가 변화
System.out.println("visitCount ; "+visitCount);
session.setAttribute("visitCount", visitCount);
**session.setMaxInactiveInterval(10); // 간격을 준다**
방문횟수가 카운트 되다가 10초라는 간격을 주고 리로드 하면 0으로 초기화되어있다
<session-config>
<session-timeout>1</session-timeout>
</session-config>
1분으로 세팅
1분후 리로드 하면 0됨
💡 본 코드에서는 serMaxAge()를 설정하지 않았으므로 브라우저 닫으면 세션이 끊기며, 관리되고 있던 서버의 데이터들이 모두 사라진다.