세션1

죽부인·2022년 12월 30일
0

📌세션

클라이언트가 웹서버에 요청하여 처음 접속하면 서버가 클라이언트에 대하여 고유한 id를 부여해 서버가 클라이언트의 정보를 저장 관리하느 것

📘특징

  • 각 클라이언트 마다 고유한 ID 부여한다.

  • 서로 관련된 요청들을 쿠키를 이용해 하나로 묶은 것이다

  • 브라우저마다 개별 저장소( session 객체 )를 서버에서 제공받는다
    쿠키 : 브라우저에 저장
    session : 서버에 저장

  • 세션종료후에 새로운 세션이 생긴다

📌세션 동작 순서

  • 클라이언트 페이지요청 ( 웹사이트 접근 )

  • 서버는 접근한 클라이언트의 Request-Header에서 Cookie를 확인하여 클라이언트가 해당 session-id를 보냈는지 확인한다.

  • session-id가 존재하지 않는다면
    브라우저가 서버에 첫 요청 을 보내고, 서버에서 session 객체 + 쿠키 를 생성해 클라이언트에게 전달한다.

  • 다른 브라우저마다 다른 세션(ID) 객체가 존재한다

  • request header로 부터 브라우저와 서버에서 세션id가 일치하는 것들을 찾고 서버의 세션 객체 에 정보를 저장한다.

  • 클라이언트 재접속시 쿠키(JSESSIONID)를 이용하여 session-id값을 서버에 전달한다.

📌세션 사용

📘세션 메서드

저장 : setAttribute(String name , ObjectValue) : 지정된 값 ( V )을 지정된 속성 이름 ( k )으로 저장

사용 : getAttribute(String name) : 지정된 이름 으로 저장된 속성의 값 반환

  • 세션 설정
HttpSession sesion = request.getSession(); //request -> HttpServletRequest
session.setAttribute("id","asdf");

📘세션 종료

세션 수동종료 : invalidate()

HttpSession session = request.getSession(); //request -> HttpServletRequest
session.invalidate();                   // 1. 세션을 즉시 종료
session.setMaxInactiveInterval(30 * 60)	// 2. 예약 종료 (30분 후)

세션 자동종료 : Web.xml 설정
분단위

<session-config>
	<session-timeout>30</session-timeout>
</session-config>

📌세션 시작 위치 설정

📘세션 속성

세션은 이미 세션이 있을 떄 세션을 새로 만들지 않는다 . ( Session = false 의미 없다 )

세션이 없을 때

  • Session = true : 세션을 새로 생성한다.
  • Session = false : 세션을 새로 생성하지 않는다.

세션이 모든 단계에 있으면 서버부담이 크다.
SessionId가 필요없는 곳에서 session = false 로 설정 해줌으로써 sessionId를 저장할 필요가 있는 부분부터 세션이 시작하게 해서 부담을 줄여준다.

📁jsp

session = false

<%@ page session="false"%>
<c:set var="loginOutLink"
	value="${pageContext.request.getSession(false).getAttribute('id')==null ? '/login/login' :'/login/logout' }" />
<c:set var="loginOut"
	value="${pageContext.request.getSession(false).getAttribute('id')==null ? 'Login' : 'Logout' }" />

session = true

<%@ page session="true" %>
<c:set var="loginOutLink" value="${sessionScope.id== null ? '/login/login' : '/login/logout'}"/>
<c:set var="loginOut" value="${sessionScope.id== null ? 'Login' : 'LogOut'}"/>

📁session = false 를 설정하면 sessionScope 와 pageContext.session는 사용불가

sessionScope.id 👉pageContext.request.getSession(false).getAttribute('id')

getSession(true) 는 session이 없는 경우 session을 새로 생성하지 않기 때문에 session이 새로생성하지 않도록 getSession(false)를 사용한다.

profile
연습장

0개의 댓글