session이란?
>> 서로 관련된 요청-응답들을 하나로 묶은것 - 쿠키를 이용
>> Browser마다 개별 저장소(Session객체)를 서버에 제공 (1 : 1)
>> Session은 서버에 저장된다.
Browser에서 서버
요청을 하면 ------------------------------>
<------------------------------- 응답을할때 쿠키에 저장해서 SessionID를 보낸다.
그 이후의 요청부터 세션ID를 보낸다. ----------------------------->
세션을 끝내는 방법
>> 자동종료 : Time Out
>> 수동종료 : inValidate()
세션이 끝난 후 새로운 세션 ID 가 응답으로 보내짐. 그 후 에는 반복된다. 위의 과정이
===========================================================================================
생성과정을 말하면
1. Browser에서 Server로 요청을 보내면 Server에서는 StandardManager가 무조건 세션 객체(저장소)를 하나 만든다.
>> Session ID를 응답을 통해서 전달함
2. Browser에 Cookie가 저장되고 해당 쿠키 안에는 SessionID가 저장되어 있어서 항상 요청할때 SessionID를 보내게된다.
>> SeesionID를 통해서 해당 저장소를 사용할 수 있다.
3. Session을 사용할때는 request.getSession(); 을 통해서 HttpSession객체를 생성하며
>> 참조변수 session을 통해서 session.setAttribute(K,V); Key, Value 형태로 저장할 수 있다.
사용 메서드
1. getId
2. getLastAccessedTime()
3. isNew()
4. invalidate()
>> 세션을 즉시 종료
5. setMaxinactiveinterval()
>> 종료시간을 예약한다 초단위
6. getMaxinactiveinterval()
7. 자동종료는 Web.xml을 통해서
>> <session-config> <session-timeout>30(분단위)</session-timeout> </session-config>
Cookie vs 세션(HttpSession) 차이점
브라우저에 저장 | 서버에 저장 |
서버 부담 X | 서버 부담 O |
보안에 불리 | 보안에 유리 |
서버 다중화에 유리 | 서버 다중화에 불리 |
>> 서버 다중화시에는 Sesson 동기화가 필요함... 이럴경우는 쿠키를 사용하는게 맞음(암호화하여)
만약에 쿠키를 허용하지 않으면(차단) 쿠키는 GET방식으로 해당 URL 주소 뒤에 붙어서 전달되게 된다.
따라서 쿠키 허용하지 않은 상태에서도 쿠키를 사용할 수 있게 하기 위해서는 URL을 적을떄는
URL 태크를 사용하여 적는게 맞다.
또한,
처음 요청시에는 GET/HTTP 두가지 방법 모두 사용하여 전달되며, 그후로는 세션이 적용되면 쿠키를통해, 아니면 GET방식으로 전달된다.
============================================================================================
1. 로그인시에 로그인이 성공하면 세션을 설정해준다.
2. 홈화면에서 Session에 ID가 저장되어있는지 set태그를 이용하여 값을 확인한 다음에 login되어있을 때와, login이 되어 있지 않을떄를 나눠서 나타내기 위하여 상단에서 변수를 생성하였고, ul 태그에서 해당 변수를 EL을 이용하여 나타내었다
=======================================================================================
Session, True, False 란?
JSP 페이지에서 Session을 True, False 하는 것이 있는데 설명하자면
True일때는
세션이 있을때 세션을 만들지 않고, Session이 없을때는 세션을 생성한다는 의미이다.
False는
세션이 있을때 세션을 만들지 않고, Session이 없을때도 세션을 생성하지 않는다.
여기서 의문이 들수 있는데 그럼
세션이 생성되고 False를 하면 세션이 종료되는건가? 라고 생각할 수있지만 그렇지 않다.
단지 세션의 생존기간을 단축할수 있다는 의미이다.
이미 Session이 시작되었다면 Session이 False래도 세션은 이미 생성되어 있다고 생각하면된다.
즉 홈화면이나 로그인페이지 같은곳에서 Session을 생성할 필요가 없으므로, 로그인이 되기 전까지 Session을 생성을 최대한 늦추는 것이라고 생각하면 될것 같다.
Session이 False일떄는
sessionScope, pageContext.session이 사용 불가능 하며
sessionScope.id를 pageContext.request.getSession(false).getAttribute("id")로 변경해야함
getSession(true)일 경우 Session을 새로 생성하기 때문에 getSession(False)를 사용해야한다.
아래와 같다.
<에러라고 뜨지만 실제로 정상적으로 작동한다>
또한 Controller에서 매개변수로 어노테이션 @CookieValue(K) String value 를 통해서 자신이 원하는 쿠키의 키에 대한 value값을 가지고 올수 있다.
'dev > Spring' 카테고리의 다른 글
[Spring] 예외처리2 (0) | 2022.06.14 |
---|---|
[Spring] 예외처리 (0) | 2022.06.13 |
[Spring] Cookie (0) | 2022.06.09 |
[Spring] redirect, forward (0) | 2022.06.09 |
[Spring] GetMapping, PostMapping (0) | 2022.06.09 |