백엔드/웹개발

[이클립스/웹개발] 브라우저 쿠키 차단된 경우 encodeURL() 사용

김곰댕 2022. 2. 24. 12:37
728x90

브라우저에서 쿠키 기능을 사용할 수 없도록 설정해놓았다면 쿠키 기능은 물론 세션기능도 사용할 수 없다. 이런 경우에는 encodeURL()메서드를 이용해 직접 서버에서 브라우저로 응답을 먼저 보낸 후 URL Rewriting 방법을 이용해 jsessionID를 서버로 전송하여 세션 기능을 사용하면 된다.


1. 다음과 같이 SessionTest5와 login2.html파일을 만든다.

2. SessionTest5에 아래와 같은 코드를 입력한다.

다시 /login으로 요청해 jsessionId를 URL rewriting 방식으로 가져온 후 세션에 접근하여 로그인 상태 유무를 판단하도록 구현

package sec04.ex01;

import java.io.IOException;
import java.io.PrintWriter;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

@WebServlet("/login4")
public class SessionTest5 extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandle(request, response);
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)	throws ServletException, IOException {
		doHandle(request, response);
	}

	private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		HttpSession session = request.getSession();
		String user_id = request.getParameter("user_id");
		String user_pw = request.getParameter("user_pw");
		if (session.isNew()){
			if(user_id != null){
				session.setAttribute("user_id", user_id);
				String url=response.encodeURL("login4");
				out.println("<a href="+url+">로그인 상태 확인</a>");
			}else {
				out.print("<a href='login2.html'>다시 로그인 하세요!!</a>");
				session.invalidate();
			}
		}else{
			user_id = (String) session.getAttribute("user_id");
			if (user_id != null && user_id.length() != 0) {
				out.print("안녕하세요 " + user_id + "님!!!");
			} else {
				out.print("<a href='login2.html'>다시 로그인 하세요!!</a>");
				session.invalidate();
			}
		}
	}
}
3. login2.html에 아래와 같은 코드를 입력한다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인창</title>
</head>
<body>
  <form name="frmLogin" method="post" action="login4" encType="UTF-8">
      아이디  :<input type="text" name="user_id"><br>
      비밀번호:<input type="password" name="user_pw"><br>
      <input type="submit" value="로그인">
      <input type="reset" value="다시입력">
  </form>
</body>
</html>
4. 로그인창에서 ID와 비밀번호를 입력하고 로그인

5. 로그인 상태 확인을 클릭

6. 서블릿에 jessionID 쿠키 값을 전송해 로그인 상태 유지

728x90