jsp 221128

John·2022년 11월 28일
0

java

목록 보기
18/20


오전 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) 를 통해 장바구니에 넣어둔음료가 표시될것이다
서버에서 심어놓은 객체는 무조건 끌고간다

SESSION

클라이언트로부터 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분이 지나면 세션넘버 삭제 -->> 다시로그인
타 브라우저로 해도 쿠키가 없으니 다시로그인

profile
hello there

0개의 댓글