Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 생성자
- pseudo-code
- Java
- InterruptException
- select
- function test
- @AllArgsConstructor
- 합배열
- 자바 람다식
- jquery
- Bean LifecCycle
- 마리아DB 쿼리 로그
- 백준 11660번
- 백준
- json
- 2차원배열 구간합
- 구간합구하기
- this와 this() 차이
- ajax
- 구간합
- MariaDB Query Log
- 백준 1235번
- 백준 11659번
- map()
- @NoArgsConstructor
- 슈더코드
- interrupted()
- SQL
- this
- 상속과 참조
Archives
- Today
- Total
평범한 연구소
[Javascript] 쿠키와 세션 본문
쿠키 (Cookie)
- 쿠키는 클라이언트에 대한 정보를 클라이언트의 로컬에 저장한 text 파일
- 쿠키는 텍스트 형태로 저장되기 때문에 변조, 복사 가능 → 보안성 없음
- 서버에서 사용자에게 편리한 기능을 제공하기 위해 많이 사용, 웹브라우저에 의해 관리된다.
- 브라우저는 각 웹서버(도메인)당 20개의 쿠키, 클라이언트에 총 300개의 쿠키를 지원. 쿠키의 크기는 각 4KB(4096byte)까지 저장 가능.
- 쿠키 정보는 javax.servlet.Cookie 클래스에 의해 관리된다.
세션 (Session)
- 둘 이상의 page request에서 사용자를 식별하거나, 웹사이트를 방문하고 해당 사용자에 대한 정보를 저장하는 방법 제공.
- Servlet container는 HttpSession를 사용하여 HTTP client - HTTP server 간의 세션을 생성.
- 세션은 한 명의 사용자. (브라우저 당 하나의 세션 객체 생성)
- 서버는 Cookie, rewriting URL와 같은 방법으로 세션을 유지하면서 관리할 수 있다.
- 객체를 세션에 바인딩하여 사용자 정보를 유지할 수 있다.
쿠키와 세션의 차이는 ?
- 사용자의 정보가 저장되는 위치
- 쿠키: 서버의 자원 전혀 사용하지 않음.
- 세션: 서버의 자원 사용.
- 보안성은 세션이 더 우수.
- 쿠키: 클라이언트의 로컬에 저장됨. 변질되거나 스니핑의 가능성 있음.
- 세션: 쿠키를 이용해서 session-id만 저장하고 그것으로 구분하여 서버에서 처리.
- 라이프 사이클
- 쿠키: 브라우저 종료해도 정보 유지. 만료기간 지정 가능.
- 세션: 브라우저가 종료되면 삭제.
Cookie 관련 예제
javax.servlet.http.Cookie 클래스 주요 메소드
setMaxAge() | 쿠키의 보존 시간(초) 설정. 기본값은 브라우저가 종료될 때 까지 쿠키가 지속되는 -1. |
setPath() | 클라이언트가 쿠키를 리턴해야하는 쿠키의 경로 지정. 기본은 쿠키를 설정한 페이지의 디렉토리인 현재 URL 및 아래의 모든 하위 티렉토리. |
getValue() | 쿠키의 값 반환. |
getName() | 쿠키의 이름 반환. |
Cookie 설정하기
- Cookie 객체 생성 : Cookie c = new Cookie(name, value)
- 한글은 인코딩, 디코딩 필수.
Cookie c1 = new Cookie("subject", "java"); // 쿠키이름,값 : 쿠키는 String 만 가능
Cookie c2 = new Cookie("subject3", URLEncoder.encode("오라클", "UTF-8"));
- 쿠키 유효 기간 설정 : setMaxAge(ms)
c1.setMaxAge(60*60); // 쿠키 유효시간 (단위:초)
c2.setMaxAge(-1); // -1: 브라우저가 종료되면 쿠키 제거(기본)
c3.setMaxAge(0); // 쿠키생성과 동시에 제거. 일반적으로 쿠키를 제거할 때 0으로 설정
- HTTP 응답 헤더에 쿠키 보내기
response.addCookie(c1);
Cookie 가져오기
- HttpServletRequest 인터페이스의 getCookie() 이용
- Cookie[] cc = request.getCookies()
- cc.getName()
- cc.getValue()
Cookie[] cc = request.getCookies();
if( cc != null) {
for(Cookie c : cc) {
String name = c.getName();
String value = c.getValue();
if(name.startsWith("product")) {
value = URLDecoder.decode(value, "utf-8");
out.print("<p>" + value + "</p>");
}
}
}
Cookie 제거하기
- 쿠키의 값 지우고 유효기간 만료 시키면 된다.
- Cookie cc = new Cookie(제거할쿠키이름, null) // 쿠키값 지우기
- cc.setMaxAge(0) // 유효시칸 만료
- response.addCookie(cc) // HTTP 응답 헤더에 제거할 쿠키를 보낸다.
Cookie c1 = new Cookie("subject", null);
c1.setMaxAge(0);
response.addCookie(c1);
// 쿠키 생성 시 setPath("/") 로 모든경로에서 쿠키 접근 가능하도록 설정한 경우, 지울때도 써줘야함.
Cookie c4 = new Cookie("tel", null);
c4.setPath("/");
c4.setMaxAge(0);
response.addCookie(c4);
Session 관련 예제
javax.servlet.http.HttpSession 인터페이스 주요 메소드
isNew() | true는 클라이언트 세션 ID를 할당하지 않은 경우. false는 이미 세션이 설정되어 있는 경우. 만약, 서버가 쿠키 기반의 세션만 사용하고 클라이언트가 쿠키 사용을 비활성화 한 경우 각 요청에서 세션이 새로운 것이므로 true. |
getAttribute() | 세션에 지정된 이름으로 바인드된 객체를 반환, 주어진 이름으로 바인드된 객체가 없으면 null 반환. |
getId() | 세션에 할당된 고유 식별자가 포함된 문자열 반환. |
getMaxInactiveInterval() | 서블릿 컨테이너의 세션을 유지할 시간을 초단위로 반환. |
getCreationTime() | 세션이 생성된 시간을 반환. |
getLasAccessedTime() | 클라이언트가 세션과 관련된 요청을 보낸 마지막 시간 반환. 컨테이너가 요청받은 시간으로 표시. |
setAttribute() | 지정된 이름을 사용하여 세션에 주어진 객체 바인딩. |
setMaxInactiveInterval() | 서블릿 컨테이너가 세션을 유지할 시간을 interval에 설정된 초 값으로 설정. 기본값 1800초. |
removeAttribute() | 특정 속성 지우기. |
invalidate() | 세션 무효화. 세션에 바인드된 모든 객체의 바인딩 해제. |
세션 객체 받아오기
- Servlet : HttpSession session = request.getSession()
- EL : sessionScope
// ex12_set.jsp
<%
// 세션 유지시간 설정. 톰캣은 기본 30분
session.setMaxInactiveInterval(60*20); // 20분으로
// 세션에 정보 저장
session.setAttribute("name", "홈자바"); // setAttribute(String, Object)
session.setAttribute("age", 20);
%>
// ex12_get.jsp
<%
String name = "";
int age = 0;
try{
// 세션에 저장된 값 가져오기
name = (String)session.getAttribute("name"); // 리턴타입 Object
age = (Integer)session.getAttribute("age");
} catch(Exception e) {
}
// 세션 유지 시간
int interval = session.getMaxInactiveInterval();
// 세션아이디
String id = session.getId();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String reg_date = sdf.format(new Date(session.getCreationTime()));
String last_date = sdf.format(new Date(session.getLastAccessedTime()));
%>
// ex12_remove.jsp
<%
// 하나씩 지울 경우엔
// session.removeAttribute("이름");
// 세션에 저장된 모든 속성값을 지우고 초기화
session.invalidate();
%>
'Pront > Javascript' 카테고리의 다른 글
[Javascript] JSTL(c:if, c:forEach...) 에서 continue 처리하기 (0) | 2022.11.20 |
---|---|
[JSP|Javascript] JDBC DBCP 설정 (0) | 2022.11.05 |
[Javascript] 간단한 유효성 검사 (0) | 2022.10.05 |
[JSP|Servlet] JSTL | Core, Fomatting, JSTL Functions (0) | 2022.10.04 |
[JSP|Servlet] 표현언어(EL) (0) | 2022.10.04 |