250x250
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
- WebClient
- 코드
- 자료구조
- 마크다운
- 클린코드
- 선형 리스트
- 트리
- 인터페이스
- mysql
- query
- 마크다운 테이블
- 빅 오 표기법
- 스택 큐 차이
- 연결 리스트
- JsonNode
- @NoArgsConstructor
- 리스트
- 클래스
- 클린
- @RequiredArgsConstructor
- 계산 검색 방식
- 쿼리메소드
- 배열
- 쿠키
- code
- 정렬
- java
- 내부 정렬
- @ComponentScan
- CleanCode
Archives
- Today
- Total
Developer Cafe
세션(Session) vs 쿠키(Cookie) 차이 본문
728x90
세션(Session)
- 웹 컨테이너에 정보를 보관할 때 사용(오직 서버에만 생성)
- 한 웹 브라우저마다 한 세션을 생성한다.
- 세션은 지정한 유효시간만큼만 유지(실행 중 지속 사용되는 데이터의 저장소로 적합)
1) 세션 생성
<%@ page session = "true" %>
<% session.setAttribute("키", 값);
2) session 기본 객체
- page 디렉티브를 통해 세션 속성 지정을 통해 session 객체를 얻을 수 있음
- 쿠키를 이용해서 세션ID를 공유
- session 객체의 메소드
String getId() : 세션 고유의 ID를 반환
long getCreationTime() : 세션이 생성된 시간을 반환(Unix time)
long getLastAccessedTime() : 웹 브라우저가 마지막에 세션에 접근한 시간 반환
3) 세션 종료
- 세션을 유지할 필요가 없으면 session.invalidate() 메소드를 사용해서 세션 종료
4) 세션 유효 시간
- session은 최근 접속 시간을 저장, session 기본 객체를 사용할 때 마다 갱신
- session.getLastAccessedTime() 메소드는 최근 접근 시간 반환
5) request.getSession() 메소드
- 세션 객체를 반환하는 메소드
- 매개변수에 false 입력시 세션이 존재하는 경우에만 객체 리턴
쿠키(Cookie)
- 웹 브라우저가 보관하는 데이터
- 필요시 웹 서버에서 쿠키를 생성해 웹 브라우저에 응답시 함께 전송
- 웹 브라우저는 쿠키를 쿠키 저장소에 보관
- 요청시 웹 서버에 쿠키를 함께 전송
- 전송받은 쿠키를 이용해서 필요한 작업 수행
1) 쿠키의 구성요소
- 이름: 쿠키의 식별자
- 값: 식별자가 가진 값
- 유효시간: 쿠키의 유지 시간
- 도메인: 쿠키를 전송할 도메인
- 경로: 쿠키를 전송할 요청 경로
2) 쿠키 생성
<%
Cookie cookie = new Cookie("cookieName", "cookieValue"); // 쿠키 생성
response.addCookie(cookie); // 웹 브라우저에 전송
%>
3) 쿠키 클래스의 메소드
- String getName() : 쿠키 이름 반환
- String getValue() : 쿠키 값 반환
- void setValue(String value) : 쿠키 값 지정
- void setDomain(String pattern) : 쿠키가 전송될 서버의 도메인 지정
- String getDomain() : 쿠키의 도메인 반환
- void setPath(String uri) : 쿠키를 전송할 경로 지정
- String getPath() : 쿠키의 전송 경로 반환
- void setMaxAge(int expiry) : 쿠키의 유효시간을 초 단위로 지정
- int getMaxAge() : 쿠키의 유효시간 반환(초 단위)
4) 쿠키 값 읽어오기
Cookie cookies[] = request.getCookies();
if(cookies != null && cookies.length > 0){
for(int i = 0 ; i < cookies.length ; i++) {
name[i] = cookies[i].getName()
value[i] = URLDecoder.decode(cookies[i].getValue(), "utf-8");
}
}
5) 쿠키 값 변경 및 쿠키 삭제하기
- 변경: 같은 쿠키 이름의 쿠키 객체를 생성해서 응답 데이터에 추가
- 삭제: setMaxAge() 메소드를 이용, 매개변수로 0 입력시 삭제됨
6) 쿠키의 도메인
- 같은 도메인을 사용하는 모든 서버에 쿠키를 보내야할 때 도메인 지정
- 사용: setDomain() 메소드를 이용해서 도메인 지정
- -> 해당 도메인에 모두 쿠키를 전송
- *웹 브라우저는 현재 서버의 도메인과 다른 도메인에 대한 쿠키 생성은 허용하지 않음
setDomain(".naver.com"); // mail.naver.com, www.naver.com, blog.naver.com 등등 모든 naver.com에 쿠키 저장
7) 쿠키의 경로
- 쿠키를 공유할 기준 경로 지정
- 웹 브라우저는 저장한 쿠키의 경로를 확인하고 해당 경로에 맞춰서 쿠키를 전송
- 사용: setPath() 메소드 사용
세션(Session) vs 쿠키(Cookie) 차이
- 가장 큰 차이점은 사용자의 정보가 저장되는 위치입니다. 때문에 쿠키는 서버의 자원을 전혀 사용하지 않으며, 세션은 서버의 자원을 사용합니다.
- 보안 면에서 세션이 더 우수하며, 요청 속도는 쿠키가 세션보다 더 빠릅니다. 그 이유는 세션은 서버의 처리가 필요하기 때문입니다.
- 쿠키는 클라이언트 로컬에 저장되기 때문에 변질되거나 request에서 스니핑(해킹기법중하나) 당할 우려가 있어서 보안에 취약하지만 세션은 쿠키를 이용해서 sessionid 만 저장하고 그것으로 구분해서 서버에서 처리하기 때문에 비교적 보안성이 좋습니다.
- 쿠키는 파일로 저장되기 때문에 브라우저를 종료해도 계속해서 정보가 남아 있을 수 있다. 또한 만료기간을 넉넉하게 잡아두면 쿠키삭제를 할 때 까지 유지될 수도 있다.
- 세션은 브라우저가 종료되면 만료시간에 상관없이 삭제된다.
- 쿠키에 정보가 있기 때문에 서버에 요청시 속도가 빠르고 세션은 정보가 서버에 있기 때문에 처리가 요구되어 비교적 느린 속도를 낸다.
728x90
'JAVA' 카테고리의 다른 글
사례를 통해 JAVA코드로 달력 구현하기 (0) | 2021.06.23 |
---|---|
Optional (0) | 2021.05.21 |
DTO 설계하기 (0) | 2021.05.11 |
JIT 컴파일러 (Just-In-Time 컴파일러) (0) | 2021.03.06 |
JAVA/Spring boot 네이버 메일 보내기 설정하기 (2) | 2021.02.25 |
Comments