클라이언트(요청) -> 서버에 요청: 세션 객체(세션ID포함) 생성 및 저장
서버(응답) -> 클라이언트에 응답: 만들어진 세션 아이디 전달(응답)(쿠키에 세션 아이디 정보를 담아 전달)
같은 클라이언트가 또 같은 서버에 요청: 세션 아이디를 쿠키에 담아 서버에 요청
서버는 그 세션 아이디의 정보를 알고 있어 같은 클라이언트라는걸 알게 되어 로그인이 안끊기고 다른 서버에 있는 페이지 내로 이동하거나 인터넷 창을 끄고 다시 접속해도 로그인이 유지됨
요약
클라이언트가 서버에 요청 : 세션객체 생성(서버가 만들어서 저장)
서버가 클라이언트에게 응답: 쿠키(서버랑 클라이언트가 주고받는 메세지) 안에 세션 ID를 담아 전달
그림 예제)
좀 더 자세히 뜯어보자
1. 클라이언트가 서버에 요청 (localhost:8080 서버에 요청한 상황)
2. 그럼 서버가 쿠키가 없으면 첫 요청으로 인식해 세션객체를 생성하고 세션ID를 발급해 쿠키를 통해 전달
F12 -> 네트워크 -> 헤더 -> 응답헤더(원본) -> Set-Cookie 세션ID 확인
3. 서버에 첫 요청이 아닌 경우 클라이언트 브라우저에 저장된 세션ID가 쿠키를 통해 서버에게 전달
F12 -> 네트워크 -> 헤더 -> 요청헤더(원본) -> Cookie: 세션ID 확인
세션객체 활용하기(HttpSession 객체)
getId() - 세션ID정보 가져오기
setAttribute(K,V) - 세션의 정보 저장 하기
getAttribute(K) - 세션의 저장시킨 정보 가져오기
@GetMapping("/home")
public void method2(HttpSession session){
System.out.println("session = " + session.getId()); // 세션ID정보 가져오기
Object name = session.setAttribute("username", name); // 세션의 정보 저장하기
System.out.println("세션에 저장된 username" + session.getAttribute("username")); // 세션의 저장된 정보 가져오기
}
session.setAttribute(K,V) 값 view에서 사용하기
model.addAttribute 처럼 view에서 ${}으로 setAttribute 한 값 사용 가능
//Controller
@PostMapping("sub5")
public void method5(@RequestParam("name") String name, HttpSession session){
session.setAttribute("username", name);
}
// view
<body>
<h1>${username}님 반갑습니다.</h1>
<a href="/main15/sub6">다른 페이지로 이동</a>
</body>
만약 model과 session key 값이 같다면
'Spring Boot' 카테고리의 다른 글
@Compnent (0) | 2023.10.17 |
---|---|
@SpringBootApplication 동작원리 (0) | 2023.10.17 |
Query String / ?name=value&name=value (0) | 2023.09.21 |
Spring 기본 구조 및 흐름 (0) | 2023.09.20 |
MySql과 스프링부트 DB 연동 (0) | 2023.02.09 |