2010-06-18 3 views
13

나는 인터뷰에서이 질문에 직면 해있다. 나는 세션 범위와 많은 혼란을 가지고 & 자바에서 관리.Java에서 세션 관리 란 무엇입니까?

<session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
</session-config> 

가 실제로 무엇을 나타 냅 않습니다 web.xml에

우리는 항목을해야합니까? 전체 프로젝트의 범위입니까?

나를 혼란스럽게하는 또 다른 점은 같은 프로젝트에서 여러 요청의 세션 범위를 분리하는 방법입니다. PC에서 로그인하는 경우 즉, 다른 PC에서 로그인하는 것과 동시에 차별화됩니까?

또 다른 혼란스러운 점은 브라우저의 차이입니다. 왜 다른 Gmail에서 다른 브라우저에서 열 수 있습니까? 그리고 Gmail은 세션이 로그인에서 로그 아웃으로 전환되는 것을 막을 수 있습니다. 우리 웹 사이트는 어떻게 유지됩니까?

답변

25

세션 관리는 자바와 서블릿으로 제한 일이 아니다.

  1. HTTP 프로토콜은 무 상태이기 때문에 서버와 브라우저는
  2. 브라우저 여러 요청을 통해 사용자의 ID를 저장하는 방법이 있어야 서버에 첫 번째 요청을 전송 : 여기가 발생 대략 어떻게
  3. 서버는 브라우저가 세션 쿠키 (아래 참조)로 식별되었는지 확인합니다 (아래 참조)

    3.1. 서버가없는 경우 클라이언트를 '알고'

    • 서버는 새로운 고유 식별자를 생성하고, 그 값이 새로 생성 된 세션 키, 같은지도 (대략)에 넣습니다. 또한 고유 식별자가 포함 된 쿠키 응답을 보냅니다.

    • 브라우저는 고유 한 식별자를 포함하는 세션 쿠키 (수명 = 브라우저 인스턴스의 수명)를 저장하고 이후의 각 요청에 고유 한 자체 식별을 위해이 쿠키를 사용합니다.

    3.2. 서버가 이미 클라이언트를 알고 있다면 - 서버는 일부에

이제 세션 쿠키에서 발견 전달 된 고유 식별자에 대한 질문에 해당하는 세션을 가져, 당신은 :

  • 세션 제한 시간은 액세스하지 않고 각 세션 맵 항목에 대해 살아야 할 시간. 즉, 클라이언트가 30 분 동안 요청을 보내지 않으면 세션 맵에서이 항목을 삭제하고 클라이언트가 세션 쿠키의 고유 키로 자신을 식별하더라도 데이터가 없습니다 서버에.

  • 세션 쿠키가 브라우저마다 다르기 때문에 다른 브라우저에서 열 수있는 다른 gmails (및 다른 사이트)는 다른 브라우저에서 열 수 있습니다. 나는. 각 브라우저는 고유 세션 ID를 전송하지 않거나 서버가 생성 한 세션 ID를 전송하여 고유하게 식별합니다. 다른 PC에에서 로그인

  • 실제로 동일합니다 - 당신이

  • 로그 아웃이 실제로 서버의 세션 ID에 대한 항목을 제거하고 세션 ID를 공유하지 않습니다.

참고 : 고유 한 세션 ID가 선택적으로 저장 될 수있는 다음 URL (http://example.com/page;JSESSIONID=435342342)

  • 2 그렇게하지 3 개 다른 방법으로 리콜의 쿠키
  • 에서

    • 관심이 없습니다
  • 0

    Java의 서블릿에는 사용자의 상태 정보를 저장하는 데 사용할 수있는 HttpSession 객체가 있습니다. 세션은 클라이언트에서 쿠키 (JSESSIONID)로 관리되거나 URL 재 작성을 사용하여 수행 할 수 있습니다. 세션 시간 초과는 HttpSession에 저장된 상태 정보를 삭제하기 전에 마지막 요청 이후에 서버가 대기하는 시간을 나타냅니다.

    범위는 브라우저 인스턴스마다 있으므로 두 개의 다른 PC에서 로그인하면 두 개의 세션 객체가 생성됩니다.

    2

    실제로 표시되는 내용은 무엇입니까?

    세션의 수명. 30 분 동안 클라이언트와 서버간에 트랜잭션이없는 경우 세션이 만료됩니다 (코드 세그먼트 당)

    전체 프로젝트의 범위는 무엇입니까?

    응용 범위가 있습니다. 우리는 같은 프로젝트에 여러 요청의 세션 범위를 분리 할 수있는 방법 저를 혼동 또 다른 점은 각 웹 응용 프로그램

    입니다 정의? PC에서 로그인하는 경우 다른 PC에 로그인하는 동시에 & 을 의미합니까, 차별화됩니까?

    예. 세션 ids (Apache Tomcat의 JSESSIONID)는 다릅니다.

    또 다른 혼란스러운 점은 브라우저 차이입니다. 다른 Gmail을 다른 브라우저에서 열 수있는 이유는 무엇입니까?

    다른 브라우저에서 같은 사용자가 로그인 할 때마다 다른 세션이 있습니다. 그리고 한 브라우저에 설정된 쿠키는 다른 브라우저에는 영향을 미치지 않습니다. 서로 다른 브라우저에서 서로 다른 Gmail 인스턴스가 가능합니다.

    Gmail에서 세션을 방지 할 수 있습니다. 로그 아웃에 로그인하십시오. 개인 웹으로 을 어떻게 관리하나요?

    Persistent cookies

    0

    다른 응용 프로그램을 다른 창에서 열면 브라우저의 여러 인스턴스가 나타납니다. 모든 인스턴스마다 다른 세션을 생성합니다.

    0

    나는 세션 관리, 인증 및 권한 부여를 위해 Apache Shiro을 권장합니다.

    나는 그것을 되 찾는다.

    @BalusC는 아래에서 설명했듯이 서블릿 컨테이너 만 http 세션 관리를 담당합니다. 시로는 그냥 사용하고 있습니다. 명시 적으로 정의한 필터를 통해 HttpSession에 연결됩니다.

    +0

    Shiro는 HTTP 세션 관리와 아무 관련이 없습니다. 그것은 인증 및 권한 부여와 관련이 있습니다. 웹 애플리케이션의 경우 "커버하에"실제로 HTTP 세션을 다른 사람들과 함께 사용하게됩니다. 그러나 그것은 ** "세션 관리"의 책임을 분명히 ** 수행하지 않습니다. 서블릿 컨테이너가 그 일을 담당합니다. 시로는 단지 그것을 사용하고 있습니다. – BalusC

    0

    우리는 세션을 관리하는 4 가지 방법이 있습니다.

    1.Cookies 3.Hidden 양식 필드를 4.HTTP 세션

    네 번째는 강력하고 대부분은 지금 - 일 사용을 다시 작성 2.URL.