※ 쿠키
상태가 없는 (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 |