brograming
로그인(세션과 쿠키)_Day31, Day32 본문
세션과 쿠키
용도: 클라이언트에 대해서 유지해야 하는 정보 저장
요청 한개에 필요한 정보는 request에 담고 로그아웃할때까지 유지해야 하는 정보는 session에 담는다
http프로토콜 : 연결 유지 안함.
방금 로그인 성공했다하더라도 기억을 못함.
억지로 기억하게끔 하는 것, 계속 연결이 유지 되는 것처럼 프로그래밍에 사용하는 객체가 세션과 쿠키
세션 : 서버에 저장. 객체 형태로 저장(오토박싱/오토 언박싱 이용). 크기에 제약 없음
쿠키 : 클라이언트 컴퓨터 저장. 데이터 유형 : 텍스트 형태로 저장. 크기에 제약이 있다. 저장할 수 있는 크기가 정해져 있음. 보안에 취약
scope 객체 : 정보를 담을 수 있는 jsp/servlet 내장 객체 => (page, request, session, application)
scope객체도 setAttribute(), removeAttribute(), getAttribute()를 갖는다.
request는 응답할때까지 정보유효. session은 로그아웃할때까지 정보 유효.
session을 사용하는 이유:로그아웃 할때가지 지속해야 하는 정보가 있을 때 사용.
여러 기능, 여러 페이지에서 사용할 정보를 세션에 저장
ex) 로그인 아이디, 멤버타입(판매자, 구매자), 등급
세션 트래킹 : 웹 어플리케이션에 첫 요청을 하면 세션 id발급(쿠키에 담아서)
클라이언트는 매 요청시 request 헤더에 발급받은 session id를 담아서 보냄
세션
1. session 생성. => 세션은 자동 생성됨. 세션을 invalidate()해도 바로 새 세션이 생성된다.
jsp 페이지 : session 내장 객체 사용
servlet 페이지 : HttpSession session = request.setSession();
2. session에 정보 저장
session.setAttribute("이름, 값);
3. session에서 정보 꺼내기
jsp페이지 : ${sessionScope.이름}
servlet 페이지 : String val = (String)session.getAttribute("이름"); 객체타입으로 오기 때문에 원래 타입으로 다운캐스팅
4. 로그아웃
session.invalidate(); // 세션 무효화. 바로 새 세션이 생성
쿠키
1. 쿠키 생성
Cookie c = new Cookie("키","값");
2. 생성한 쿠키를 response에 담는다.
response.addCookie(c); => c에 담긴 정보가 클라이언트에 저장
3. 다음 요청시 request에서 쿠키를 꺼냄
request.getCookies(); => request에 담긴 전체 쿠키 읽음. 반환값은 쿠키 타입의 배열(Cookie[ ]). 자바로 읽을 때
* 쿠키 이름 : ${cookie.키.name } => name 속성(이름) // jsp에서 읽을 때 c.getName() // 자바로 읽을 때
* 쿠키 값 : ${cookie.키.value } => value 속성(값) // jsp에서 읽을 때 c.getValue() // 자바로 읽을 때
4. 쿠키값 수정 : 동일한 이름으로 새값으로 저장
Cookie c = new Cookie("변경할 쿠키 이름", "새값");
response.addCookie(c);
5. 쿠키 유효시간 설정
cookie.setMaxAge(60*60*24) => 유효시간 하루
6. 쿠키 삭제
cookie.setMaxAge(0);
세션
request.setAttribute("이름",값); : 뷰페이지에 가기전에 정보를 request에 담아 전달 / 한 요청이 응답을 보낼때까지 정보 살아있음
하나의 요청을 처리하기 위해 forward로 여러 페이지를 이동할 수 있음.
서버내에서 페이지 이동 : forward
하나의 요청(request)이 여러 페이지를 거쳐 응답페이지가 클라이언트한테 갈때까지 살아있지만 응답(response)이 가고 나면 정보는 사라짐.
새 요청을 보낼때 정보는 이미 없어져있다.
session.setAttribute("이름",값); : 마찬가지로 세션도 세션에 담아 전달 / 세션이 유효하지 않을때까지, 세션이 무효화될때까지 정보 살아있음
session에 담은 정보는 프로젝트 내의 모든 파일 사용 가능. 로그아웃하면 없어진다.
session.removeAttribute("이름"); // 세션에 저장한 정보 삭제
저장한 정보가 언제가지 유지가 되느냐에 따라 request를 쓸지, session을 쓸지 정해진다.
세션은 만들지 않아도 웹에 접속하면 자동으로 만들어짐.
//getSession(true) : 현재 사용중인 세션이 있으면 그 세션을 반환. 없으면 새로 생성해서 줌. 파라미터가 true
HttpSession session = request.getSession();
//getSession(true) : 현재 사용중인 세션이 있으면 그 세션을 반환. 없으면 새로 생성해서 줌. 파라미터가 true
true가 디폴트 파라미터이므로 파라미터 안넣으면 자동으로 true
//getSession(false) : 현재 사용중인 세션이 있으면 그 세션을 반환. 없으면 에러
session.setAttribute("param1", "value1");
//세션에 값 저장
//타입의 제약이 없으며 객체 형태로 저장됨
String val = (String) session.getAttribute("param1");
// 세션 값 가져올 때
String sessionId = session.getId();
//session id는 연결을 구분하는 고유한 값. 사람의 주민번호 같은 역할.
// 중복되지 않는 16진수 난수를 생성하여 클라이언트한테 쿠키에 담아서 준다.
// 클라이언트는 서버에 요청할때마다 헤더에 담아서 보냄.
session.invalidate();
//로그아웃 처리. 세션 무효화


쿠키
서블릿에서 출력



jsp에서 출력
CookieTest.java 에서
response.sendRedirect(request.getContextPath()+"/CookieRead");를
response.sendRedirect(request.getContextPath()+"/index.jsp"); 로 idex.jsp로 이동하게끔 변경




'Kosta' 카테고리의 다른 글
| DispatcherServlet / commandHandler / commands.properties_Day38 (0) | 2023.04.11 |
|---|---|
| 파일 다운로드_Day38 (0) | 2023.04.11 |
| [JAVASCRIPT]_Day25 (0) | 2023.03.22 |
| [JAVA, Oracle] 게시판 만들기_Day18 (0) | 2023.03.09 |
| [JAVA, Oracle] emp vo, dao, main Day16 (0) | 2023.03.08 |