쿠키는 웹 사이트가 있는 서버에 의해 사용자의 컴퓨터에 저장되는 정보를 뜻한다
짧은 시간 사용되는 것이 일반적인 정보데이터인데
의도적으로 유효시간을 늘릴 수도 있다.
세션은 서버가
브라우저의 상태를 저장하는 웹데이터 컨테이너 같은 느낌이다.
사용자가 브라우저에서 로그인한다면
일반적으로 로그인한 정보를 세션에 저장한다.
그 세션의 주소값을 브라우저에게 보내주고
브라우저는 그 세션의 주소값을 읽고 주기적으로 접속하여
세션에 저장된 데이터를 사용한다.
로그인이 계속 유지될 수 있는 이유도 그것이다.
세션의 유효시간은 서버 소프트웨어마다 차이는 있지만
일반적으로 30분이다.(일반적으로 설치 시 설정이 가능하다)
마지막 세션 접근 시기부터 30분이 지나면 서버는
세션에 접근한 데이터가 더이상 없다고 판단하고
세션을 지워버린다.
사용자가 로그인하고 아무행동 없이 오랜시간 지난 경우
자동으로 로그아웃 되는 현상이
세션이 만료되어 주소값이 소실된 것이다.
이 경우 다시 로그인하면 새로운 세션 주소값을
서버로부터 쿠키형태로 받게 되는 것이다.
이론은 이만하면 됐으니 코드로 보자
쿠키를 먼저 보자
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <% // 1. cookie 객체 생성 Cookie c1 = new Cookie("id","jake"); // 2. cookie의 유효기간 설정(초 단위로 저장) c1.setMaxAge(24 * 60 * 60); // 하루 저장 // 3. Cookie 객체를 response에 실어줌 response.addCookie(c1); Cookie c2 = new Cookie("nickname","sye"); c2.setMaxAge(30); response.addCookie(c2); Cookie c3 = new Cookie("name","value"); c3.setMaxAge(10); response.addCookie(c3); %> <a href="02_get_cookie.jsp">생성된 쿠키 확인</a> | cs |
쿠키 개체를 3개 만들었다.
setMaxAge는 초단위로 유효시간을 설정한다.
그 후 response.addCookie로 서버에 보낼 쿠키를
response에 저장해서 보내보자
c1은 하루
c2는 30초
c3은 10초이다.
생성된 쿠키를 확인하는 jsp로 들어가면
JSESSIONID는 서버가 보낸 세션의 주소값이다.
여기서는 무시하도록 하자.
처음에는 ID와 nickname name 모두 살아있는 모습을 확인할 수 있지만
30초 지난 뒤 유효시간 10초의 name과, 유효시간 30초의 nickname은
사라진 모습을 볼 수 있다.
설정해둔 유효시간이 다 지난 것이다.
1 2 3 4 5 | <% Cookie c = new Cookie("id",""); c.setMaxAge(0); response.addCookie(c); %> | cs |
쿠키를 지우는 방법은 메소드가 따로 없다..
유일하게 지우는 방법은 같은 id로 쿠키 객체를 생성한뒤
유효시간을 0초로 해버려 덮어 써버리는 방법이다.
이렇게 되면 쿠키는 자동으로 사라지게 된다.
다음으로는 세션이다.
1 2 3 4 5 6 7 8 9 10 11 12 | <h1>세션 값 설정</h1> <% // session: JSP 내장 객체, 세션 상태 관리를 위한 객체. // session.setAttribute("name", value): 세션에 정보를 저장 // session.getAttribute("name"): 세션에 저장된 정보를 읽음 session.setAttribute("id","admin"); session.setAttribute("pw", "admin1234"); %> <a href="05_get_session.jsp">세션 정보 확인</a> | cs |
세션도 쿠키랑 사용이 비슷하다
아이디로 정보를 저장하고, 나중에 꺼내오는 방식이다.
1 2 3 4 5 6 7 8 9 10 11 12 | <h1>Session 정보 확인</h1> <% request.setAttribute("id","hahaha"); String uid = (String)session.getAttribute("id"); String pw = (String)session.getAttribute("pw"); %> id: <%=uid %><br/> pw: <%=pw %><br/> <h2>EL 사용</h2> id: ${id}<br/> pw: ${pw}<br/> | cs |
세션 정보 확인 jsp는 이렇게 된다.
저기서 세션은 서버에 있는 세션을 사용 하는 것을 말한다.
EL 사용은 그냥 무시하자.
어떤 id값이 우선되나 확인하려고 넣은 값이다.
이렇게 나타나는 모습을 확인할 수 있다.
아마 세션을 호출하는 코드(04 jsp)를 버튼 클릭안하고 30분이 지난 뒤 클릭하면
아무 데이터도 안보일 것이다.
서버가 설정한 세션의 유효기간이 지났기에
쿠키로 주소값을 알고 있더라도 세션이 없어 접근이 불가능하기 때문이다.
(실제로 기다려보지는 않았다)
이 세션 자체를 지우는 방법은 없는 것 같다.
세션은 본래 클라이언트에서 관리하는 것이 아닌
서버가 관리하는 것이다. 멋대로 지우거나 해버리는 건 안되는 것 같고
개별 아이디에 실린 데이터 자체를 삭제하거나
세션을 무효화시키는 방법이 있다.
브라우저에서 서버에 세션을 무효화 시켜달라는 요청을 보내고
서버가 그 요청을 받아 세션을 더 이상 이용할 수 없게 만드는 방식이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <h2>id 정보 삭제</h2> <% session.removeAttribute("id"); String id2 = (String) session.getAttribute("id"); int n2 = (Integer) session.getAttribute("number"); %> <%=id2 %><br/> <%=n2 %><br/> <h2>세션 무효화(invalidate)</h2> <% session.invalidate(); // session.getAttribute("id"); // invalidate() 메소드를 호출한 후에는 세션 관련 메소드(get, set)를 // 호출하면 Exception이 발생 %> | cs |
위는 removceAttribute로 아이디의 데이터를 삭제한 모습이며
밑은 세션을 무효화 시키는 메소드이다.
보통 로그아웃 시 사용되는 메소드다.
'프로그래밍 > Web' 카테고리의 다른 글
Ajax - Asynchronous JavaScript And XML (1/2) (1) | 2017.11.12 |
---|---|
MVC Model2 패턴 / 간이 게시판 제작 기록 (4/4) (0) | 2017.11.11 |
MVC Model2 패턴 / 간이 게시판 제작 기록 (3/4) (0) | 2017.11.11 |