Spring

[jsp] 쿠키 / 세션

sian han 2022. 5. 16. 18:39

※ 쿠키

상태가 없는 (stateless,connectless) 프로토콜을 위해 상태를 지속시키기 위한 방법

별로 중요하지않은 정보를 저장하는 용도 (중요정보는 쿠키거부기능이 들어있어서 저장되지않음)

임시파일이다. 4kb이하로 생성 (크게는 못함)

 

쿠키 - 클라이언트쪽에 저장 (보안이 안좋음)

세션 - 웹 서버쪽에 저장됨 (보안이 좋음) 중요한 정보는 여기 저장

 

 

▶ 쿠키사용방법

쿠키클래스 객체를 생성해서 사용

구성요소 = name value 쌍, (+유효기간,도메인등)

setMaxAge(유효기간) : 꼭 설정 ! 초단위, 이 시간을 벗어난 쿠키는 사용기간이 만료된 쿠키

response.addCookie(cookie) = 쿠키가 생성됨. 여러개 담을 수 있다

저장할때 response

읽어올때는 request로 읽어오고 getCookies 메서드 사용해서 배열로 받음

   - getCookies() : 웹 브라우저에 저장된 쿠키를 모두 읽어오기 때문에 리턴타입이 Cookie[]

 

 

▶ 쿠키 생성하기

  - 상태정보를 저장하기 위한 방법=> 사용자의 pc에 임시파일로 저장됨, 최대 4kb크기

 

[1] 쿠키 객체 생성

Cookie ck = new Cookie("id","hong"); // 이름,값(name,value) 쌍으로 넣는다

 

[2] 유효기간 설정

   - (변수명.setMaxAge(초단위))

     - ex ) (7*24*60*60) : 일주일

ck.setMaxAge(2*60); //초단위로 입력=> 120초 동안 쿠키가 유지됨

 

[3] 쿠키추가

response.addCookie(ck);

 

두번째 쿠키 생성, 추가

Cookie ck2 = new Cookie("age","21");
ck2.setMaxAge(20*60); //20분
response.addCookie(ck2);

 

  = > 크롬 -> 모든쿠키 및 사이트 데이터보기에서 저장한 쿠키 확인가능

 

 

[4] 쿠키제거

	Cookie ck = new Cookie("ckUserid", userid); 
				ck.setMaxAge(0);
				ck.setPath("/");
				response.addCookie(ck);

"/" 의 의미 : 
setPath는 주소에서 쿠키를 전송하기 때문에 
지정해주지 않으면 쿠키를 생성한 경로 에서만 쿠키가 전송된다
 "/" 설정하면 : 현재경로가 아닌 루트경로에 
저장하므로(루트경로의 하위경로 = 모든경로) 모든 경로에서 쿠키 사용 가능

 

 

 

▶ 쿠키읽어오기

 

[1]생성한 쿠키 정보 읽어오기

String id = "", age ="";
Cookie[] ckArr = request.getCookies(); //Cookie[] 로 받은것확인
if(ckArr!=null){
	for(int i=0; i<ckArr.length;i++){
		if(ckArr[i].getName().equals("id")){
			id=ckArr[i].getValue();
		}
		if(ckArr[i].getName().equals("age")){
			age=ckArr[i].getValue();
		}	
	}
}

위에서 생성한 쿠키 유지시간이 120초 => 120초가 지난 후에 useCookie.jsp 를 재실행하면 쿠키의 값을 가져오지 못함

 

 

[2] 쿠키확인하기

<h1>쿠키생성</h1>
<p>쿠키이름 : id ,쿠키 값 : <%=id %></p>
<p>쿠키이름 : age ,쿠키 값 : <%=age %></p>

 

 

 

 

▶ 쿠키경로지정

cookie.setPath()

경로미설정 : sandbox coookiteTest 폴더(특정폴더)에 대해서만 쿠키를 읽어갈 수 있음

     => 좋은방법이아님, 로그인 / 탈퇴 폴더가 다른경우 읽어갈수없음

 

경로 미 설정 : 요청 URL 의 경로에 대해서만 쿠키전달
경로 설정 : 설정한경로 및 그 하위경로에 대해서 쿠키전달 => 하위경로에서도 쿠키를 읽어갈 수 있음

 

Cookie ck2 = new Cookie("age","21");
ck2.setMaxAge(20*60); //20분
ck.setPath("/"); //경로설정
response.addCookie(ck2);

 => setPath 쿠키 경로를 "/"로 지정

 

 

 


 

 

※ 세션

: 웹 서버 쪽의 웹 컨테이너에 상태를 유지하기 위한 정보를 저장

http 세션 인터페이스를 구현해서 사용

 

 대분류 세션은 클라이언트 당 한개씩 생성됨

 중분류 브라우저당 한개

 소분류 브라우저 종류별로 한개 (파이어폭스,엣지,크롬)

 최소분류 사이트별로 한개 (다음,네이버)

 

같은 사이트내에서 돌아다니면 세션이 유지됨

 

 

브라우저가 최초 접속할때 생성됨 

네이버 최초요청 => 네이버에 세션이 만들어짐. 최초 접속 이후에는 해당 세션을 사용함 (내 금고를 내가 사용)

  ex ) 최초요청할때 금고를 할당받고 금고열쇠를 (쿠키로)받음.

        그 이후에는 금고 열쇠(unique한 세션아이디)로 금고를 열어서 세션 사용

 

 

 

▶ 쿠키대신 세션사용하는 이유

보안상 더 좋음

브라우저에서 쿠키사용을 막아버리면 쿠키사용못함

   -세션은 쿠키설정여부에 따라 상관없이 사용할 수 있음

   - cookie 설정 사용못하게 막아버리면 세션은 URL Rewriting 을 사용함 => 언제든 사용가능

 

jsp 에서 세션기본유지시간 : 30분 / setMaxInactiveInterval()로 변경가능

Session 객체의 메소드인 set,getAttribute() 를 사용할 수 있는 객체 : pageContext request session application 

 

 

 

▶ 세션사용하기

[1] setSession

Session : 사용자의 정보를 저장하는방법, 웹서버에 저장됨

String id ="hong";
String pwd = "1234";

session.setAttribute("id", id);//name, value 쌍을 넣는다
session.setAttribute("pwd", pwd); // 아이디와 비밀번호저장
<p>session 에 정보 저장됨</p>
<a href ="useSession.jsp">세션정보읽어오기</a>
<hr>
<p>session id : <%=session.getId() %></p> <!--세션의 아이디  -->

 

=> 생성된 내 세션의 ID

 

 

[2] useSession

 - 생성된 내 세션의 정보 읽어오기

 

String id = (String)session.getAttribute("id"); /*object 로 반환되기때문에 (String)형변환 */
String pwd = (String)session.getAttribute("pwd");
int interval = session.getMaxInactiveInterval(); // 세션유지시간 기본 - 30분(1800)초
<h1>세션 정보</h1>
<p>id : <%=id %></p>
<p>pwd : <%=pwd %></p>
<p>세션유지시간 : <%=interval %>초</p>

<hr>
<p>session id : <%=session.getId() %></p>
<a href ="logout.jsp">logout</a>
<!-- 로그아웃되면 세션이 다 날아가서 로그인이안된 기본화면으로 보여줄 수 있다 -->

 

[3] logout

  - 세션 죽이기

  - invalidate() 메서드사용

session.invalidate(); //세션의 모든 정보 삭제
response.sendRedirect("main.jsp");

 

 

[4] main

세션 죽이고 main 으로 다시 돌아왔을때 세션id가 변경되어있는것을 확인할 수 있다

기존세션삭제 => 새 세션 생성

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'Spring' 카테고리의 다른 글

[jsp] 모델2 기반의 MVC 패턴 게시판의 흐름  (0) 2022.05.22
회원가입  (0) 2022.05.19
[jsp] 모델2 기반의 MVC 패턴  (0) 2022.05.18
[jsp] 에러  (0) 2022.05.17
[jsp] 내장객체, 액션태그,자바빈  (0) 2022.05.13