(2022) 공부 (Study)

🔥 JSP 기본 정리 - #14 Session

수낭 2020. 12. 31. 14:04

 이번 시간에는 Cookie의 단점을 대신하기 위해 주로 쓰이는
Session의 개념과 사용법에 대해서 알아보겠습니다.


🔑 목차

🎉 1. Session 이란?

🎉 2. Session 구현

 

🚩 1. Session 이란?

 재 보안 관련 문제 때문에 점점 쓰이지 않는 Cookie에 비해서,
(Server(Web Container)가 만들고, Clinet/Server에서 모두 저장/사용)

이러한 단점을 보완한 채로 클라이언트서버연결유지시켜주는
방법 중 하나로 Session이 있다.

 Cookie보안이 취약하기에 요즘은 Session더 사용하는 추세이다.

 이 역시 Http protocol이기 때문에, 1 request/response 연결 해제된다.
 Cookie
Client 측에 저장/사용되는 반면,
 
SessionServer 에 저장/사용된다.

 Cookie 파트에서 설명했던 것과 유사하게 Session 또한 
Sessionnull 값과 비교하는 식으로 주로 사용된다.

 

🚩 2. Session 구현

 우선 코드 먼저 살펴보자.

< login.jsp > (JSP 파일) >

...

<body>
	<%
	if(session.getAttribute("memberId") != null){
		response.sendRedirect("loginOk.jsp");
	}
	%>

	<form action="loginCon" method="post">
		ID : <input type=text name="mId"><br>	
		PW : <input type=text name="mPw"><br>	
		<input type=submit value="login">	
	</form>
</body>

 로그인 화면을 담당할 .jsp 파일은 위와 같다.

if(session.getAttribute("memberId") != null){
	response.sendRedirect("loginOk.jsp");
}

 내장 session 객체namememberIdattribute가 저장되어 있다면, (if)
바로 loginOk.jsp (로그인 완료 페이지) 강제 이동시킨다.

<form> action="loginCon" method="POST"
	...
</form>

“login” 버튼 클릭 시, LoginCon.java라는 Servlet으로 전송한다.

< LoginCon.java > (Servlet 파일)

...

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
	throws ServletException, IOException {

	String mId = request.getParameter("mId");
	String mPw = request.getParameter("mPw");
	
	PrintWriter out = response.getWriter();
	out.print("Id : " + mId + "<br>");
	out.print("Pw : " + mPw + "<br>");
	
	HttpSession session = request.getSession();
	session.setAttribute("memberId", mId);
	
	response.sendRedirect("loginOk.jsp");
}

위는, 로그인 버튼 클릭 시 작동할 Servlet 코드이다.

HttpSession session = request.getSession();
	session.setAttribute("memberId", mId);

login.jsp 화면에서 사용자가 입력한 Id 정보
 
session“memberId”라는 이름의 attribute저장한다.

response.sendRedirect("loginOk.jsp");

 로그인 완료 화면으로 강제 이동시킨다.

< loginOk.jsp > (JSP 파일)

...

<body>
	
	<%
	session = request.getSession();
	out.print("session : "+session.getAttribute("memberId")+"<br>");
	%>
	
	<form action="logoutCon" method="post">
		<input type="submit" value="logout">
	</form>
	
</body>

 위는, 로그인이 정상 처리 되었을 때, 이동할 jsp 페이지이다.

session = request.getSession();
	out.print("session : "+session.getAttribute("memberId")+"<br>");

 session“memberId”라는 이름으로 저장된 attribute출력한다. (사용자 Id)

<form action="logoutCon" method="post">
	<input type="submit" value="logout">
</form>

 “logout”버튼 클릭, “logoutCon”이라는 Servlet호출한다.

< LogoutCon.java > (Servlet 파일)

...

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
	throws ServletException, IOException {
		
	HttpSession session = request.getSession();
	session.invalidate();
	
	response.sendRedirect("login.jsp");
}

 위는, 로그아웃 클릭 시, 작동하게 될 Servlet 코드이다.

HttpSession session = request.getSession();
	session.invalidate();

 request 객체로부터 내장 session 객체를 가져오고,
 
session제거한다. (invalidate = 제거하다)

response.sendRedirect("login.jsp");

  login 화면(login.jsp)되돌려 보낸다.

로그인 화면
로그인 완료 화면
주소 창에 login.jsp로 강제 이동 시도
(이후 화면) 이동되지 않는다.

- loginOk.jsp 페이지로 강제 이동 (session이 존재하기 때문에, if)

logout 버튼 클릭
(이후 화면) 첫 로그인 화면

 login.jsp 으로 이동

 

 다음 포스팅에서는 한글 처리에 대해서 작성하도록 하겠습니다.