[JSP/SERVLET] JSP Cookie, SESSION

Posted by 신희준 on September 21, 2017


2017 - 09 - 21 (목)

  • Cookie
  • session

  • 기본사항 정리


    1 . Cookie

    Cookie는 브라우저가 기록하는 데이터이다. 즉, Client 측면에서 저장하고있는 정보라고 할 수 있다. Chrome 에서 나의 방문기록이나 Cookie 정보를 볼 수 있다. 또한 이 정보를 유저들이 삭제할 수 있다. 기업에서는 이 Cookie를 활용하여 CRM(Customer relationship management)를 더욱 효율적으로 하고자 하며 이 정보는 보안상으로도 계속 문제를 발생시키고 있는 부분이 있다.


    Cookie 사용을 위한 코딩 순서

    1.. Cookie 객체를 하나 생성한 후 Cookie를 추가한다.

    <%
      Cookie cookie = new Cookie("쿠키이름", "쿠키 값");
      response.addCookie(cookie);
    %>
    

    2.. Cookie값을 읽어온다.

    </P>

    <%
      Cookie [] cookies = request.getCookies();
    %>
    

    3.. 쿠키변경 및 삭제

    <%
    Cookie cookie = new Cookie("name", URLEncoder.encode("바꿀값","utf-8"));
    response.addCookie(cookie);
    %> //쿠키 값 변경
    
    <%
    Cookie cookie = new Cookie("Cookie이름" , "Cookie 값");
    cookie.setMaxAge(0);
    response.addCookie(cookie);
    %> //쿠키 제거
    

    Cookie 실습

    설명
    기존에 생성했던 LoginForm.jsp (로그인폼) 에서 ID저장을 클릭하고 로그인했을 때 다시 로그인할 경우 쿠키에 ID저장 , ID 저장을 누르지 않았을 때는 쿠키 삭제

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <%@ page import="java.net.URLEncoder"%>
    <%@ page session="true" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
    	<%
    response.setContentType("text/html");
    response.setCharacterEncoding("UTF-8");
    request.setCharacterEncoding("UTF-8");
    String id = request.getParameter("id");
    String pw = request.getParameter("pw");
    String target = request.getParameter("target");
    String restore = request.getParameter("restore");
    
    
    
    Cookie abc[]=request.getCookies();
    
    if(id.equals("shj7242")&&pw.equals("1234")){
    	session.setAttribute("id", id);
    	if(target.equals("null")){
    		if(restore!=null){
    			Cookie cookie= new Cookie("restore",URLEncoder.encode(id, "utf-8"));
    			response.addCookie(cookie);
    			response.sendRedirect("/");
    		}else{
    			for(int i =0; i < abc.length; i ++){
    				if(abc[i].getName().equals("restore")){
    					Cookie abcd = new Cookie("restore","");
    					abcd.setMaxAge(0);
    					response.addCookie(abcd);}		
    				}
    			response.sendRedirect("/");
    			}
    
    		}else{
    		response.sendRedirect(target); //http://localhost/index.html (root임)
    		}		
    }else{
    	response.sendRedirect("http://localhost/LoginForm.jsp");
    }
    %>
    
    </body>
    </html>
    
    2 . SESSION

    쿠키는 클라이언트 측면에서 정보를 저장하지만 SESSION은 웹 컨테이너에 정보를 보관, 즉 서버에서 생성한다. 예를들어 로그인 폼을 통해 로그인을하면 다른 페이지에있어도 로그인된 상황이 유지되어야한다. 이를 처리할 때 세션을 사용한다.

    1...session 생성

    <%@ page session="true"%>
    
    <%
      session.setAttribute("session 이름", "session 값")
    %>
    

    page 디렉티브의 session을 true로 주면 session이 생성된다. 또한 setAttribute() 메서드를 사용하여 session의 이름과 값을 세팅해준다.

    2...session 불러오기

    <%
      String name = (String)session.getAttribute("ID");
    %>
    ID : <%=ID %>
    

    로그인 아이디의 유지처럼 페이지에 세션을 불러와 로그인 상태인지, 로그아웃 상태인지를 점검해준다.

    3...session 종료

    <%
      session.invalidate();
    %>
    

    메인페이지에서 로그아웃을 클릭했을 때 session이 종료되어 버튼이 로그인으로 바뀌는 것을 예로들 수 있다.

    SESSION 실습

    설명
    1 . 메인페이지에서 로그인을 한 후 ( 세션 추가 )

    2 . 메인페이지가 로그인상태가됨 (로그아웃 버튼으로 전환)

    3 . 로그아웃 버튼을 누르면 세션종료 (다시 로그인 버튼으로 전환)

    index.jsp의 nav바에서 로그인 부분

    <%
     String curId = null;
     if(session.getAttribute("id") != null)
        curId= (String)session.getAttribute("id");
     %>
     <%=curId%>
     <%if(curId==null){ %>
     <li><a href="LoginForm.jsp"><b>로그인</b></a></li>
     <%}else{ %>
     <li><a href="logout.jsp"><b>로그아웃</b></a><li>
     <%} %>
    

    logout.jsp

    <body>
            <%
          	session.invalidate();
        	response.sendRedirect("/");
        	%>
    </body>
    

    LoginAction.jsp 코드는 위에(Cookie 부분 실습 코드) 참조