쿠키와 세션에 대한 기본 개념이 헷갈리신다면,
개념 정리를 먼저 확인하고 보세요!
쿠키와 세션에 개념 정리 링크 → https://creamilk88.tistory.com/101
※ 아래 코드에서 이어지는 Servlet class들은 Cookie&Session 개념정리에서 사용되었던 코드와 동일하므로,
아래 링크를 참고하면 된다.
( 참고 코드들 → SessionOne.java / SessionTwo.java / SessionThree.java )
https://creamilk88.tistory.com/101
[ JSP와 session의 관계 ]
> JSP는 웹 컨테이너(or WAS or Serlvet Contrainer) 에 의해 .java 확장자의 class(java class)로 생성된다.
(이는 tomcat\work directory에 생성된 .java와 .class를 통해 확인할 수 있다.)
이렇게 생성되는 java code에는 _jspService() 메서드 내에 pageContext.getSession() 형태의 코드가 생성되고,
이를 통해 기존 세션이 없으면 새로 생성하고, 있으면 기존 세션을 반환하는 형식으로 동작된다.
> JSP에서 세션이 생성되지 않도록 처리하기 위해서는 (*권장사항*), 지시자 태그에 <%@ session="false" %>를 추가하면 된다.
이 설정을 통해 JSP의 _jspService() 메서드 내에 생성되었던 pageContext.getSession() 코드는 삽입되지 않으므로,
자동으로 세션이 생성되는 것을 방지할 수 있다.
> 별도의 설정 없이는 세션이 자동으로 생성되므로,
로그인 여부 판단은 세션 유무와 함께 로그인 처리 시에 세션에 할당한 (session.setAttribute(name, value) 인증 정보를
함께 비교해서, 세션이 존재하고 + 세션 내에 인증 정보가 있으면 ⇒ 로그인한 사용자 라고 인식하면 된다.
> 1. JSP에서 java로 생성될 때, 세션이 자동으로 생성되도록 처리 - default 설정
세션이 있으면 기존 세션을 반환하고, 세션이 없으면 새로 생성하게 된다.
(jsp에 있는 session은 기존에 만들어진 session이다 / 서버를 끄고 (통신을 끊고) 다시 실행하면 jsp에서 새로운 session을 만든다)
/sessiontest1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Session Test 1</title>
</head>
<body>
세션 테스트 1 : <%=session.getId()%>
</body>
</html>
> 2. JSP에서 java로 생성될 때, 세션이 자동으로 생성되지 않도록 처리 (*권장사항*)
권장 사항인 이유
: 디도스 공격으로부터 보안성을 높일 수 있고, 서버가 세션 자동생성으로 인해 불필요하게 무거워지는 것을 사전에 방지할 수 있다.
지시자 태그 <%@ %> 에 session="false"를 추가해준다.
session.getId()는 complie error가 발생한다.
why? 위 지시자 태그에서 session="false"를 명시하여,
세션을 생성하는 코드가 생성되지 않았으므로, 기존 세션이 없다.
/sessiontest2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" session="false"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Session Test 2</title>
</head>
<body>
Session Test 2 : JSP에서 java로 생성될 때, 세션이 자동으로 생성되지 않도록 처리<br><br>
<%
// session.getId()
// -> compile error가 발생함
HttpSession session = request.getSession(false);
if (session == null) {%>
세션이 없습니다<br>
<a href = "SessionOne">SessionOne으로 이동</a>
<% } else { %>
기존 세션이 있습니다<br>
session ID : <%=session.getId() %>
<% } %>
</body>
</html>
[ 결과 ]