오전 11:03 2022-11-28
서버는 클라이언트의 요구에 맞게 데이터를 개인의 웹브라우저에 응답한 후
관계를 종료한다.
이는 다수를 기다리는 입장이기때문에 소켓을 닫아야만 하는 HTTP 의 특성인데,
그렇다면 로그인과 같이 어느 개인이 로그인 했다는것을 어떻게 기억할까?
이런 연결성을 유지하기위한 두가지 방법이 존재한다.
- COOKIE
- SESSION
공통적으로 key, value 형태로 심는다
개인마다 중복되지않는 특정 값을 주는 방법이다.
웹 브라우저에서 저장하는가,
서버에서 저장하는가 로 나뉜다.
개인 웹브라우저에 값을 저장한다.
판매처에서 물건을 구입할때의 예시이다
<% //몰 접속 //상품 장바구니에 담기 Cookie cookie = new Cookie("CookieN","CookieV"); //음료 1 저장 cookie.setMaxAge(60*60); 시간표시 response.addCookie(cookie);//response안에다가 cookie를 보냄 %>
이 상태만으로는 의미가 없다
다시 로그인 해, 상품란을 고르면
해당서버에서 심어놓은 쿠키값이 무조건 같이 전송되게끔 되어있다
response.addCookie(cookie) 를 통해 장바구니에 넣어둔음료가 표시될것이다
서버에서 심어놓은 객체는 무조건 끌고간다
클라이언트로부터 REQUEST 를 받게되면
값을 서버에 저장한다.
session.setAttribute("id", "1234");
session.setAttribute("pw", 1234);
<% Enumeration enumeration = session.getAttributeNames(); int i = 0; while(enumeration.hasMoreElements()) { i++; String sName = enumeration.nextElement().toString(); String sValue = (String)session.getAttribute(sName).toString(); out.println("sName : " + sName + "<br />"); out.println("sValue : " + sValue + "<br />"); } out.println("************************ <br />"); session.removeAttribute("id"); Enumeration enumeration1 = session.getAttributeNames(); i = 0; while(enumeration1.hasMoreElements()) { i++; String sName = enumeration1.nextElement().toString(); String sValue = (String)session.getAttribute(sName).toString(); out.println("sName : " + sName + "<br />"); out.println("sValue : " + sValue + "<br />"); } //session.invalidate(); //모두 지운다 %>
int pw = (Integer) session.getAttribute("pw");
session.getAttribute("pw");는 오브젝트 이므로.
(Integer) 로 박싱 후,
int pw 로 들어가면서 오토언박싱 된다.
가장 빈번하게 사용되는 로그인 방식으로 양쪽 모두 사용된 쿠키 세션방식이다.
아래는 그 흐름이다.
웹서버에 최초접속시
4바이드 / 32비트 넘버 생성, 세션에 올려둠
쿠키로 같은 번호를 생성 -->> 세션아이디
메일함 보러간다 치면 그거랑 같이 세션아이디를 보냄
30분이 지나면 세션넘버 삭제 -->> 다시로그인
타 브라우저로 해도 쿠키가 없으니 다시로그인