본문 바로가기
Java Web Programming/4. JSP

[JSP/세션관리] JSP에서의 Session 세션 생성 원리(자동생성, 자동생성 방지 방법)

by 파프리카_ 2020. 9. 1.
728x90
반응형

쿠키와 세션에 대한 기본 개념이 헷갈리신다면,

개념 정리를 먼저 확인하고 보세요!

쿠키와 세션에 개념 정리 링크 → https://creamilk88.tistory.com/101

 

[JSP/세션관리] Cookie 쿠키 & Session 세션 이란 무엇인가? (개념, 용도)

[ 세션 관리 ] HTTP의 특성 ⇒ Stateless (상태 정보를 유지하지 않는다) : 클라이언트와 서버가 서로 통신할 때, request ↔ response가 한 번 이루어지면, 클라이언트에 대한 정보를 유지하지 않는다. (클�

creamilk88.tistory.com


 

※ 아래 코드에서 이어지는 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>

[ 결과 ]

 

 

728x90
반응형