앞 절에서는 쿠키와 세션 기능을 알아봤음. 세션 역시 클라이언트의 세션 쿠키를 이용해 각 브라우저에 대한 세션 기능을 사용함. 그런데 만약 브라우저에서 쿠키 기능을 사용할 수 없게 설정했다면 쿠키 기능은 물론 세션 기능도 사용할 수 없음.
이럴 때는 encodeURL() 메서드를 이용해 직접 서버에서 브라우저로 응답을 먼저 보낸 후 URL Rewriting 방법을 이용해 jsessionId를 서버로 전송해 세션 기능을 사용하면 됨.
이번에는 세션 쿠키를 사용하지 않고 encodeURL() 메서드를 이용해 jessionId의 세션 id를 브라우저에 응답으로 전송한 후 세션을 사용해 보겠음.
다시 /login으로 요청해 jsessionId를 URL rewiting 방식으로 가져온 후 세션에 접근해 로그인 상태 유무를 판단하도록 구현함.
package sec04.ex01;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/login")
public class SessionTest5 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
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("utg-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);
// 변수 url에 encodeURL()을 이용해 응답 시 미리 jsessionId를 서블릿으로 다시 전송함.
String url = response.encodeURL("login");
// 로그인 상태 확인 클릭 시 jsessionId를 서블릿으로 다시 전송함.
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();
}
}
}
}
이미지 넣을 것
대부분의 브라우저는 쿠키 사용을 기본으로 설정하고 있지만 쿠키를 사용할 수 없을 경우에는 이렇게 encodeURL() 메서드를 이용해 세션 기능을 사용할 수 있음.