• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

session.getAttribute(SessionConst.LOGIN_MEMBER) 질문

22.08.13 16:01 작성 조회수 782

1

안녕하세요 영한님!

질문드립니다..!

 

아래와 같이 로그인 시 세션에 로그인 회원정보를 보관하고

 

//로그인 성공 처리 TODO

//세션이 있으면 있는 세션 반환, 없으면 신규 세션을 생성

HttpSession session = request.getSession(true);

//세션에 로그인 회원 정보 보관

session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);

 

아래와 같이 세션에서 SessionConst.LOGIN_MEMBER가 key 값으로

session 에서 SessionConst.LOGIN_MEMBER와 매칭되는 value인 Member 객체를 꺼내오는 것으로 이해하고 있는데,,

Member loginMember = (Member) session.getAttribute(SessionConst.LOGIN_MEMBER);

 

위와 같은 로직으로 여러회원이 로그인 할 텐데...

어떻게 하나의 key 값으로 여러개의 Member 객체를 구별 할 수 있는지 궁금합니다...!

 

감사합니다.!

답변 1

답변을 작성해보세요.

4

codesweaver님의 프로필

codesweaver

2022.08.16

안녕하세요, Dabi 님! 공식 서포터즈 codesweaver 입니다.

Session 은 1개의 클라이언트와 서버 사이의 연결을 의미합니다.

그래서 여러 회원이 동시에 하나의 서버에 접근한다면, 각 회원별 별도의 Session 을 내부적으로 생성합니다. 그래서 충돌이 발생하지 않습니다.

감사합니다.

Dabi님의 프로필

Dabi

질문자

2022.08.16

HttpSession session = request.getSession(true);

를 하게되면

사용자 kim이 접속해도 session_kim(kim에 대한 세션) 이 생성되고,

사용자 jang이 접속해도 session_jang(jang에 대한 세션) 이 생성되어서

 

session.getAttribute(SessionConst.LOGIN_MEMBER);

을 하게 되면

사용자 kim은 session_kim.getAttribute(SessionConst.LOGIN_MEMBER);

사용자 jang은 session_jang.getAttribute(SessionConst.LOGIN_MEMBER); 

을 수행하는거라서 충돌이 발생하지 않는다라고 이해 하면 될까요?!

 

제가 이해한것을 정리하자면 다음과 같습니다.

1. 사용자 kim이 로그인 요청

2. 서버는 Session을 생성하고 생성한 SessionId를 쿠키에 담아서 클라이언트에게 전송

3. 클라이언트 요청시 쿠키에 담긴 SessionId를 서버에 전송

4. 서버는 Session 저장소에서 SessionId에 맞는 Session을 찾음

5. 찾은 Session에서 해당 키값(SessionConst.LOGIN_MEMBER)에 맞는 객체(Member) 반환

 

 

 

감사합니다.!🤗

codesweaver님의 프로필

codesweaver

2022.08.18

안녕하세요 Dabi님!

네 맞습니다. :) 

추가로, 세션 파일은 해시(hash)값으로 생성합니다.

 

감사합니다