Session 이란?
HTTP를 이용하여 클라이언트가 서버와 통실할때 서버측에 생성되는 "상태정보"를 세션이라 부릅니다.
세션은 HttpSession 인터페이스로 표현되며, HttpServletRequest의 getSession()을 통해 객체로 생성될 수 있습니다.
세션 객체가 생성될때 요청보내온 클라이언트의 정보, 요청시간, 등을 조합하여 세션ID 가 부여되며, 이 세션ID 는 클라이언트 측에서 쿠키로 저장됩니다.
세션 객체는 서버 측에 저장되며, 이후 사용자가 서버에 접근할때 세션ID를 이용하여 세션 객체에 접근합니다.
로그인/로그아웃 form 작성
우선 다음과 같이 간단한 html 문서를 작성하였습니다. form을 전달하기위한 용도로 필요한 내용만 작성하였습니다.
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>회원 인증</title>
</head>
<body>
<form action="locProc" method="post">
ID : <input type="text" name="id"><br>
비밀번호 : <input type="password" name="pwd"><br>
<input type="submit" value="로그인">
</form>
<p>
<a href="logProc">로그아웃</a>
</body>
</html>
위의 html을 보면 로그인과 로그아웃을 보면 둘다 action="logProc" 로 되어있는 것을 볼 수 있습니다.
그렇다면 동일한 URI에 대한 요청을 어떻게 구분하여 로그인과 로그아웃 처리를 분리하여 진행할까요?
바로! GET, POST 방식을 통해 구분합니다!
로그인을 할때 form을 전달할때는 POST 방식으로 진행하고, 로그아웃시 <a> 테그로 요청받았기에 GET방식으로 진행됩니다.
따라서 서버에서는 POST 방식의 요청이 들어오면 로그인 작업을 하고, GET방식의 요청이 들어오면 로그아웃을 하면 됩니다!
Servlet 구현
따로 DB를 연동하지는 않습니다. 그냥 Session에 따라 로그인/ 로그아웃 가능한지 판단하여 처리할 뿐 입니다.
package com.edu.test;
import java.io.*;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet("/logProc")
public class LoginOutServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8");
PrintWriter out = resp.getWriter();
String id = req.getParameter("id");
String pwd = req.getParameter("pwd");
if(id.isEmpty() || pwd.isEmpty()) {
out.print("ID 또는 비밀번호를 정확히 입력해주세요.");
return;
}
HttpSession session = req.getSession();
if(session.isNew() || session.getAttribute("id") == null) {
session.setAttribute("id", id);
if(session.isNew()) {
out.print("Session생성후, 로그인 완료");
}else out.print("로그인을 완료하였습니다.");
}else {
out.print("현재 로그인 상태입니다.");
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8");
PrintWriter out = resp.getWriter();
HttpSession session = req.getSession(false);
if(session != null && session.getAttribute("id") != null) {
session.invalidate();
out.print("로그아웃 완료");
}else {
out.print("현재 로그인 상태가 아닙니다.");
}
out.close();
}
}
'BackEnd > Servlet, JSP' 카테고리의 다른 글
[Servlet, JSP] Servlet Life Cycle : Servlet 생명 주기 (0) | 2022.01.14 |
---|---|
[Servlet, JSP] MVC : Model View Controller (0) | 2022.01.13 |
[Servlet, JSP] FilterConfig, FilterChain (0) | 2022.01.13 |
[Servlet, JSP] RequestDispatcher와 요청 재지정 (0) | 2022.01.13 |
[Servlet, JSP] Servlet 과 Cookie (0) | 2022.01.13 |
댓글