나의개발일지
Spring) 쿠키와 세션 본문
728x90
1. 쿠키
- 쿠키란 웹 애플리케이션에서 클라이언트와 서버 간에 상태를 유지하는 데 사용되는 정보이다. 쿠키는 클라이언트의 웹 브라우저에 저장되며, 클라이언트가 다시 서버에 요청을 보낼 때마다 해당 쿠키가 함께 전송된다.
- 쿠키는 해당 유효시간이 지나면 자동으로 삭제된다.
- 클라이언트에 300개 까지 쿠키 저장가능하다.
- 쿠키 동작 방식
쿠키 생성 및 저장
- 서버는 HTTP응답 헤더를 사용하여 클라이언트에게 쿠키를 설정하도록 지시한다.
- 서버에서 클라이언트로 전송되는 HTTP응답에는 'Set-Cookie' 헤더가 포함된다.
클라이언트 저장
- 클라이언트의 웹 브라우저는 받은 쿠키를 저장한다.
- 쿠키는 클라이언트의 파일시스템에 저장되어 다음 요청 시에도 사용된다.
클라이언트 요청 시 쿠키 전송
- 클라이언트가 서버에 새로운 요청을 보낼 때, 브라우저는 해당 도메인과 관련된 모든 쿠키를 HTTP요청 헤더에 추가하여 서버로 전송한다.
서버에서 쿠키 읽기
- 서버는 클라이언트의 HTTP요청을 받을 때, 요청 헤더에서 쿠키 정보를 읽어 들인다.
- Spring에서는 'HttpServletRequest' 객체를 통해 이 정보를 얻을 수 있다.
쿠키의 만료
- 쿠키는 만료날짜가 지나면 브라우저에서 해당 쿠키를 삭제한다.
<쿠키 생성>
Cookie cookie = new Cookie("cookieName", "cookieValue");
cookie.setMaxAge(60*30); //쿠키시간
response.addCookie(cookie);
<쿠키 정보를 이용한 작업 수행>
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
String name = cookie.getName();
String value = cookie.getValue();
// 쿠키 정보를 이용한 작업 수행
}
}
2. 세션
- 세션은 쿠키를 기반하고 있지만, 정보를 서버측에서 저장하고 관리한다.
- 사용자가 웹 애플리케이션과 상호 작용하는 동안 일시적으로 정보를 저장하고 유지 할 수 있다.
- 세션 동작 방식
세션 시작
- 사용자가 웹 애플리케이션에 처음으로 접속하면, 서버는 클라이언트에게 고유한 세션 식별자를 부여한다
- 이는 일반적으로 쿠키를 통해 이뤄지며, 브라우저는 이 세션 ID를 저장한다
세션 정보 저장
- 클라이언트가 서버에 요청을 보낼 때만다, 세션 ID도 함께 전송된다.
- 서버는 세션 ID를 통해 클라이언트를 식별하고, 해당 세션에 속하는 정보를 서버 측에 저장한다.
- 이 정보는 일반적으로 서버 메모리, 데이터베이스, 또는 외부 저장소에 저장될 수 있다.
세션 정보 사용
- 서버는 세션을 통해 클라이언트의 상태를 추적하고 필요한 정보를 유지한다.
- 예를 들어, 로그인 정보, 장바구니 내용 등을 세션에 저장하고, 클라이언트의 요청에 따라 해당 정보를 읽거나 갱신한다.
세션 만료 및 삭제
- 세션은 보안 및 자원 관리를 위해 일정 기간 동안 유지된다. 만료 기간이 지나면 세션은 종료되고, 클라이언트는 새로운 세션 ID를 받게 된다.
- 사용자가 로그아웃하거나 특정 동작을 수행하면 세션은 명시적으로 종료 될 수 있다.
보안 고려사항
- 세션 정보에는 민감한 데이터가 포함될 수 있기 때문에, HTTPS를 통한 암호화가 일반적으로 사용된다.
- 세션 공격을 방지하기 위해, 적절한 인증 및 권한 부여 메커니즘이 필요하다.
<컨트롤러에서 세션 생성, 읽기>
@GetMapping("/setSession")
public String setSession(HttpSession session) {
// 세션에 데이터 설정
session.setAttribute("username", "exampleUser");
return "sessionSet";
}
@GetMapping("/getSession")
public String getSession(HttpSession session) {
// 세션에서 데이터 읽기
String username = (String) session.getAttribute("username");
// ...
return "sessionGet";
}
728x90
반응형
'Back-End > Spring' 카테고리의 다른 글
Spring) DI 의존성 주입 (0) | 2024.04.15 |
---|---|
Spring) IoC & Container (0) | 2024.04.15 |
Spring) SpringMVC (1) | 2024.01.04 |
Spring) Row Mapper (1) | 2023.12.18 |
Spring) STS와 MySQL연결하기 for.Mac (1) | 2023.11.10 |