Jsp-session & cookie
세션
- 세션을 이용한 대표적인 서비스가 ‘장바구니’.
- HTTP 프로토콜이란 상태가 없는 프로토콜이라고 한다. 클라이언트와 서버간 상태에 대한 보존 없이 매 순간 순간 새로운 연결을 하고 요청에 대한 응답을 서버가 전송하면 연결이 끊기기 때문이다. 이렇게 연결이 끊기면 로그인접속 상태나 담아두었던 장바구니목록 상태가 전부 없어진다.
- 이를 해결하기 위해 세션을 사용한다. (세션 : 클라이언트와 서버 간의 논리적인 연결)
- 클라이언트가 서버에게 요청할 때 보내지는 정보에 클라이언트에 대한 정보가 포함이 되어 전달되고 서버는 요청에 실려온 클라이언트의 정보를 알 수 있다. 이 정보가 바로 세션이다.
- 서버는 클라이언트가 보낸 요청에 함께 존재하는 정보를 가지고 있다가 그 클라이언트로부터 다른 요청이 왔을 때 가지고 있던 정보를 비교해서 동일한 클라이언트인지 비교 판단하게된다.
- 이건 마치 예전에 봤던 개미에게 꼬리표를 달아서 다음에 발견했을 때 꼬리표번호를 읽어 이전에 봤던 개미라고 인식하는 것과 같은 이치이다.
- 이렇듯 서버가 자신에게 요청을 보냈던 클라이언트의 정보를 갖고 있는 상태를 세션이라고 한다.
쿠키
- 쿠키도 상태가 없는 프로토콜을 위해 상태를 지속시키기 위한 방법이다.
- 세션과의 차이점은 세션은 서버에 클라이언트 정보를 저장한다면 쿠키는 클라이언트 자신에게 그 정보를 저장하게 하는 것이다.
세션 | 쿠키 |
---|---|
서버 측에 저장되는 클라이언트 정보 → 보안에 유리 클라이언트에 ID는 저장한다. |
클라이언트 측에 저장되는 클라이언트 정보 |
자바의 객체를 담을 수 있다. (ENUM으로) | 문자열 값만 쿠키 내에 저장할 수 있다. |
javax.servlet.http패키지 안의 Cookie 클래스를 이용해서 생성되는 객체 | HttpSession 인터페이스를 통해 생성되는 객체 |
로그인한 상태로 서버에 아무 요청없이 일정 시간이 지나면 세션이 만료되었습니다. 다시 로그인해주세요. 라는 말이 뜨는 것과 같음 → 수강신청 10분 제한시간 이거랑 비슷한 원리 | 크롬에서 로그인하면 가끔 위에 이 로그인 정보를 기억하시겠습니까? 해서 yes 누르면 다음에 그 사이트 로그인하려고 화면들어가면 아이디 비밀번호가 딱 쳐져있는 상태가 되는게 쿠키의 예시이다. |
세션에 담을 수 있는 정보량은 제한이 없다. | 하나의 쿠키는 4KB을 넘을 수 없고 클라이언트에 쿠키가 300개를 넘을 수 없다. |
- 결국 http 프로토콜의 상태정보를 지속시키지 못하는 단점때문에 세션과 쿠키가 등장하여 해결해주었다는 얘기이다. 가장 큰 차이는 어디에 존재하는가!
쿠키 클래스 이용하기
- 쿠키 생성하기
Cookie myCookie = new Cookie("쿠키이름", "쿠키값");
- 생성된 쿠키 설정하기
myCookie.setValue("새롭게 설정할 쿠키값"); myCookie.setMaxAge(수명); // 수명은 초단위이며 보통 7*24*60*60 처럼 표현한다. -> 7일
- 설정이 완료된 쿠키 전송
response.addCookie(myCookie);
- 요청에 포함된 쿠키들 전부 가져오고 읽기
Cookie[] cookies = request.getCookies(); String cookie_name = cookies[i].getName(); String cookie_value = cookies[i].getValue();
세션 내장객체 이용하기
- 서버가 클라이언트마다 id라는 식별자(꼬리표)를 부여하고 이후 클라이언트가 다시 접속하면 이 id를 통해 구분한다. 이 id를 관리하는 것이 session이다. 여기서 이 id는 클라이언트에 저장되고 나머지 정보들은 서버에 저장되므로 매우 안전하다.
- 세션 생성하기
session.setAttribute("세션이름","세션값");
- 세션 유지시간 설정하기
session.setMaxInactiveInterval(5*60); // 5분
- 세션 속성삭제 / 세션 삭제
session.removeAttribute("세션이름"); session.invalidate();
- 세션 사용 및 출력
Enumeration en = session.getAttributeNames(); while (en.hasMoreElements()) { String sessionName = (String) en.nextElement(); String sessionValue = (String) session.getAttribute(sessionName); }
댓글남기기