강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của newh
newh

câu hỏi đã được viết

Spring MVC Phần 2 - Công nghệ tận dụng phát triển web Back-end

Sắp xếp

HttpSession에서 쿠키를 Response에 넣어주기

Đã giải quyết

Viết

·

608

·

Đã chỉnh sửa

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
안녕하세요, SessionManager와 HttpSession을 비교하다 의문점이 들어 질문 드립니다.

SessionManager를 구현할 땐 Cookie를 생성한 후 이를 response에 넣주도록 했습니다. 그래서 이를 사용할 때 파라미터로 response를 넣어줬구요.

public void createSession(Object value, HttpServletResponse response) {
    // 세션 ID 생성하고 값을 세션에 저장
    String sessionId = UUID.randomUUID().toString();
    sessionStore.put(sessionId, value);

    // 쿠키 생성
    Cookie mySessionCookie = new Cookie(SESSION_COOKIE_NAME, sessionId);
    response.addCookie(mySessionCookie);
}

그런데 서블릿에서 구현한 HttpSession을 사용했을 땐 Session을 생성한 후

HttpSession session = request.getSession(true);

setAttribute로 값을 넣어준 후 (이 때 쿠키가 생성된다고 이해했습니다.)

session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);

따로 response에 쿠키를 넣어주지 않았는데도 클라이언트에 쿠키가 저장되는것 같습니다. HttpSession이 이를 가능하게 해주는 걸까요?

springmvc

Câu trả lời 2

1

제가 알기로는, 세션에 값을 저장한다고 해서 쿠키가 생성되는 것은 아닙니다.

다만 세션에 값을 저장하면 세션키라는게 생기는데, 브라우저에서 해당 세션으로 접근하기 위해 필요한 값입니다.

이 세션키를 브라우저에 전달할 때 쿠키로 전달을 해주기 때문에 쿠키가 생성되는 것이지, 세션에 단순히 값을 set 한다고 해서 쿠키가 생성되는 것은 아니라고 알고 있습니다.

newh08님의 프로필 이미지
newh08
Người đặt câu hỏi

답변 감사합니다!! 검색해보니 Servlet Container 가 뭔가 역할을 해주는 것 같은데 좀 더 공부를 해봐야겠네요,,
혹시 세션에 값을 저장할 때 파라미터로 주는 SessionName 은 어디에 저장되는 값인지 알고계실까요..?

수업에서 구현했던 SessionManager와 비교했을 땐 쿠키 이름이라고 생각했는데 지금 보니 아닌것 같네요..

말 그대로 생성된 세션 자체에 저장됩니다.

하나의 세션 객체는 map과 유사한 구조를 가지고 있다고 이해했어요.

map이 <key, value> 쌍을 기준으로 1개의 요소라고 치니까,
session 또한 <name, value>로 값이 저장된다.

저는 이렇게 공부했습니다.

0

newh08님의 프로필 이미지
newh08
Người đặt câu hỏi

구글링을 하다 찾았는데,

HttpSession 은 Servlet Container 에서 생성하는 인스턴스이고,

Servlet Container에서 HttpResponse의 쿠키에 JSESSIONID 라는 이름으로 Session Id를 넣어주는 것 같네요..!

그런데 하나 또 궁금한점이..

저희가 session.setAttribute() 에서 해당 세션의 이름을 SessionConst.LOGIN_MEMBER 로 정했고, SessionManager에선 이 값을 쿠키의 KEY 값(이름) 으로 넣어준 것 같은데 (SessionManager 에서 사용하는 변수들을 HttpSession과 비교해봤을 때 SESSION_COOKIE_NAME 이 SessionConst.LOGIN_MEMBER 와 매칭되는거로 생각했습니다.)

HttpSession에선 쿠키의 이름은 따로 정해져 있네요..! 혹시 해당 메서드에서 파라미터로 넣어준 세션의 이름은 어디에 저장되는 걸까요..?

제가 한번 로그인에서 세션을 2개 생성해봤는데 쿠키는 하나만 생성되는걸 확인했습니다.

이 소리는 세션ID는 하나라는 소리인데 HttpSession에서는 Map 을 사용해 세션ID 하나와 저장하는 값이 매칭되는게 아닌걸까요? 세션ID 하나에 여러개의 저장 값이 매칭되고 이를 구분하는게 세션의 이름 같은데.. 이것을 어떻게 구현할 수 있는걸까요..?

한가지 정확한건 하나의 세션 ID는 하나의 세션값에만 매칭될 수 있습니다.

HttpSession을 통해 세션1이라는 세션을 생성 후, name을 하나로 value를 one으로 저장했을 때...

세션1이라는 session에 대한 세션ID가 발행됩니다.

그래서 String id = 세션1.getId()를 통해 해당 id 값을 가져올 수도 있습니다.

그리고 세션1에 name, value가 저장되어 있어 getAttribute() 등으로 값을 추출해 확인할 수 있는 것이라고 알고 있습니다.

newh08님의 프로필 이미지
newh08
Người đặt câu hỏi

아 그럼 세션ID 하나가 Map 과 매칭되고, 그 Map 안에 name, value 가 저장되어있으면 세션 ID 와 name 으로 특정한 value를 찾아낼 수 있겠네요..!
생각해보니 HttpSession의 구현체를 한번 찾아보면 되겠네요!! 답변 정말 감사합니다!

Hình ảnh hồ sơ của newh
newh

câu hỏi đã được viết

Đặt câu hỏi