인프런 커뮤니티 질문&답변

양치잘하기님의 프로필 이미지

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

로그인 처리하기 - 서블릿 HTTP 세션1

세션 상수와 그리고 홈로그인에서 질문이 있습니다.

작성

·

216

1

쿠키를 이용한 방법, 직접만든 세션을 이용하는 방법, 서블릿 세션을 이용하는 방법 모두에서 사용자별로 고유의 세선id를 생성하였지만 그 생성된 값들을 찾기 위한 키는 상수로 정의하여 사용하셨습니다.

// 쿠키만 이용하였을 떄
Cookie idCookie = new Cookie(“memberId”, loginMember.getId()+””);
// 직접 만든 세션
Cookie MySessionCookie = new Cookie(SESSION_COOKIE_NAME, sessionId);
// 서블릿 세션
Session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember)

이렇게 하면 서버측에서는 같은 키로 서로 다른 값들을 저장하게 되는것 같은데 어떻게 구별해서 사용자 객체를 찾아내는 건가요?

다른분들도 질문을 많이 하신것 같은데 찾아보아도 이해가 좀 어려워서 질문 드립니다.

 

그리고 홈컨트롤러에서 homeLogin의 모든 버전에서 쿠키, 세션을 이용해 찾았는데 회원데이터가 없으면 return “home”;을 하는데

회원이 로그인을 하여야 쿠키, 세션을 만들어주기 때문에 값이 존재하지 않을 수 없을것 같은데 해당 사항을 고려하신 이유가 있는건가요?

쿠키, 세션을 이용해 값을 찾는순간부터

답변 3

0

저도 찾아보고 있었는데 이게 더 간단한 답일 것 같아서 답변 남깁니다.

  1. 쿠키의 name을 상수로 사용하는 것의 이유는 쿠키를 배열로 반환하는 것과 관련이 있는 것 같아요

  2. 쿠키를 배열로 반환한다는 것은 세션에서 관리하는 쿠키의 값이 여러 개라는 것을 함의합니다.

  3. 그래서 우리는 지금 쿠키가 하나만 반환되었지만 여러 개의 쿠키가 있을 때 해당 쿠키의 이름으로 조회하여 값을 반환하여 사용하는 것 같아요

 

정리하자면

"쿠키의 이름은 세션 내의 다양한 쿠키를 상정하기 때문에 이름으로 세션 값을 찾기 위해 필요한 것"

이라고 정리할 수 있을 것 같아요.

 

 

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 양치잘하기님

쿠키와 세션을 이용한 사용자 식별

쿠키와 세션을 이용해 사용자를 식별하는 과정에서, 서버는 각 사용자에게 고유한 세션 ID를 부여합니다. 이 세션 ID는 사용자가 로그인할 때 생성되며, 이후 해당 사용자를 식별하는 데 사용됩니다.

쿠키를 이용한 방법

  1. 사용자가 로그인:

    • 사용자가 로그인하면 서버는 사용자 ID와 관련된 고유한 세션 ID를 생성합니다.

    • Cookie idCookie = new Cookie(“memberId”, loginMember.getId() + "");

    • 서버는 이 쿠키를 클라이언트에 보냅니다.

  2. 사용자가 재방문:

    • 클라이언트는 서버에 요청을 보낼 때 쿠키를 함께 전송합니다.

    • 서버는 요청에 포함된 쿠키를 확인하여 사용자 ID를 추출하고, 이를 통해 사용자 정보를 찾습니다.

직접 만든 세션을 이용한 방법

  1. 사용자가 로그인:

    • 로그인 시 고유한 세션 ID를 생성합니다.

    • Cookie MySessionCookie = new Cookie(SESSION_COOKIE_NAME, sessionId);

    • 이 세션 ID를 쿠키로 클라이언트에 전송합니다.

  2. 사용자가 재방문:

    • 클라이언트가 전송한 쿠키에서 세션 ID를 추출합니다.

    • 해당 세션 ID를 통해 서버의 세션 저장소에서 사용자 정보를 가져옵니다.

서블릿 세션을 이용한 방법

  1. 사용자가 로그인:

    • 로그인 시 서블릿 세션을 이용하여 사용자 정보를 저장합니다.

    • Session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);

    • 서블릿 컨테이너가 자동으로 세션 ID를 생성하고 클라이언트에 전송합니다.

  2. 사용자가 재방문:

    • 클라이언트가 전송한 세션 ID를 통해 서버의 세션 저장소에서 사용자 정보를 가져옵니다.

 

사용자 객체를 찾는 방법

서버는 각 사용자에게 고유한 세션 ID를 부여하여 쿠키나 세션 저장소에 저장된 데이터를 기반으로 사용자를 식별합니다. 쿠키, 직접 만든 세션, 서블릿 세션 모두 같은 방식으로 사용자 정보를 저장하지만, 세션 ID와 같은 고유한 식별자를 사용하여 충돌 없이 각각의 사용자 데이터를 관리합니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

양치잘하기님의 상세한 질문에 감사드리며, 세션과 쿠키의 사용 및 구별 방법에 대한 세부적인 내용을 이해하는 데 도움이 될만한 답변을 찾았습니다.

세션 ID와 세션 저장 방식에 관한 이해:

세션 상수를 통한 구별된 값 저장:
각 사용자별로 생성되는 고유의 세션 ID를 기반으로 서버 측에서 사용자 정보를 구별합니다. 사용자별로 세션 ID가 다르기 때문에, 서버는 이 ID를 식별자로 사용하여 각각의 사용자 데이터에 접근할 수 있습니다. 따라서, Session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember) 같은 코드에서 SessionConst.LOGIN_MEMBER는 단지 데이터를 저장하거나 조회할 때 사용되는 키이고, 실제로 사용자를 구별하는 것은 세션 ID를 통해 이루어집니다.

이 주제에 관하여, 세션아이디에 대해 질문드립니다..에서 비슷한 의문을 가진 다른 학습자에게 제공된 설명이 유익할 수 있으며, 서버의 세션 저장소 관리 방식 및 세션과 쿠키의 상관관계에 대한 설명을 확인할 수 있습니다.

홈 컨트롤러에서 로그인 상태 확인:

로그인 상태와 관련하여, 홈 컨트롤러에서 homeLogin메소드가 회원 데이터의 존재 여부에 따라 다른 행동을 취하는 것은 로그아웃 상태를 포함하여 다양한 상태를 처리하기 위함입니다. 즉, 사용자가 로그인하지 않아 세션 또는 쿠키에 사용자 정보가 저장되어 있지 않은 경우를 고려한 것입니다. 이에 대한 구체적인 질문 역시 세션 질문입니다.세션 개념이 잘 이해가 되지 않아서 질문입니다에서 도움을 받을 수 있을 것 같습니다. 여기에서는 세션의 생성, 확인, 삭제 등과 관련하여 궁금증을 해소할 수 있는 답변이 제공되고 있습니다.

사용자 인증 및 세션 관리에 대한 이해를 돕기 위한 목적으로 위의 링크들을 추천드리며, 각 링크는 귀하의 질문과 관련된 내용을 세부적으로 다루고 있습니다. 이러한 자료들을 통해 세션 및 쿠키의 작동 원리와 활용 방법에 대해 더 확실히 이해하실 수 있을 겁니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.