본문 바로가기

Spring Boot

세션(session), 쿠키(cookie)

클라이언트(요청) -> 서버에 요청: 세션 객체(세션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