1. 세션이란?


  • 사용자의 연결 상태 및 정보를 가지고 있는 객체로서 서버에 저장된다.

    • 쿠키가 클라이언트의 로컬PC에 저장되는 것과 상반된다.
  • 세션은 웹 브라우저마다 1개씩 할당된다.

    • 각 세션을 구분하기 위해 세션ID를 할당한다.
    • 웹 서버는 세션을 만들고난 후 세션ID를 쿠키에 담아서 웹 브라우저에게 보낸다.
  • 세션은 웹 브라우저 종료, 혹은 서버에서 삭제 시에 삭제된다.

    • 로그인을 한번만 하면 페이지를 변경해도 로그인 상태가 유지되는 것도 세션을 사용한 기술이다.
  • 세션 동작 순서

    • 클라이언트(웹브라우저)가 웹서버에 페이지 요청
    • 클라이언트가 보낸 요청의 쿠키에 해당 클라이언트의 세션ID가 있는지 확인
    • 세션ID가 없으면 새로운 세션 생성 후 쿠키에 세션ID를 담아서 응답을 보낸다.
    • 이후부터의 페이지 요청에서는 클라이언트 쿠키에서 세션ID를 확인 후 해당 세션 사용

2. session 기본객체


  • JSP에서는 session 기본 객체를 가지고 있으므로 이를 사용하면 된다.

  • 세션 생성

session.setAttribute("userInfo", userInfo);
  • 세션 정보 관련 메소드
    • getId()
      • 세션ID
    • getCreationItme()
      • 세션 생성 시간
    • getLastAccessedTime()
      • 웹 브라우저가 가장 마지막에 세션에 접근한 시간

  • 세션에 데이터 저장

    • `session.setAttribute("name", "value");
  • 세션에서 데이터 읽기

    • `session.getAttribute("name");

예제
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>

<!DOCTYPE html>
<html>
<head>
    <title>세션 정보</title>
</head>

    <%
        Date time = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    %>

    <%
        session.setAttribute("id", "asdf94");
        session.setAttribute("name", "김삿갓");
    %>

<body>

<p>세션ID : <%= session.getId() %></p>
<p>세션 생성시간 : <%= format.format(session.getCreationTime()) %></p>
<p>세션 접근시간 : <%= format.format(session.getLastAccessedTime()) %></p>
<p><%= session.getAttribute("name") %>님 반갑습니다. ^^</p>

</body>
</html>

출력결과

세션ID : 01DF500BD2A9C662B870DAD5E9D2D3B6
세션 생성시간 : 2020-07-19 18:30:55
세션 접근시간 : 2020-07-19 18:43:09

김삿갓님 반갑습니다. ^^

  • 세션 종료

    • session.invalidate()
  • 세션 유효시간 설정

    • WEB-INF/web.xml 파일에 설정 추가(분 단위)
    • session객체의 setMaxInactiveInterval() 사용(초 단위)
...
    <session-config>
        <session-timeout>50</session-timeout>
    </session-config>
...
//1시간
<% session.setMaxInactiveInterval(60 * 60) %>

3. 세션을 사용한 로그인 상태 유지


  • session 기본객체에 로그인 정보를 저장해두면 된다.
<%
    String id = request.getParameter("id");
    String pw = request.getParameter("pw");
    if(...) {
        session.setAttribute("memberId", id);
    } else {
        alert("로그인 실패");
    }
%>

  • 이후부터는 클라이언트 요청이 들어왔을 때 memberId 속성이 존재하는지에 따라 로그인 여부를 판별할 수 있다.

  • 로그아웃하거나 웹브라우저를 종료할때는 보안을 위해 세션을 끊어주어야한다.

    • session.invalidate()

' > JSP' 카테고리의 다른 글

14. EL(Expression Language) 연산자  (0) 2020.07.21
13. EL(Expression Language) 기본  (0) 2020.07.21
11. 쿠키(Cookie)  (0) 2020.07.19
10. 자바빈(JavaBean)  (0) 2020.07.19
9. <jsp:forward> 액션 태그  (0) 2020.07.19

+ Recent posts