Session의 생명 동기

4145 단어

1. 세션이란 무엇인지, 어떻게 사용하는지


Session은 사용자와 웹 서버 사이의 세션을 저장합니다. 즉, 서버가 브라우저를 위한 저장 공간입니다.
브라우저와 서버 사이의 세션은 무상태(무상태는 세션 간에 관련성이 없어 사용자가 방문한 적이 있음을 식별할 수 없음)인 메커니즘이기 때문에 세션은 접근을 연결하는 데 사용할 수 있기 때문에 사용자와 로그인하는 등 기능에 많이 사용된다.
서버측에서 Session의 값을 가져오는 방법:
1 // request Session 
2 // session setAttribute(k,v) Session 
3 request.getSession().setAttribute("key","value");
4 
5 // session getAttribute(key) Session 
6 request.getSession().getAttribute("key");

Session이 존재하는 것은 안전성을 높이기 위해서이다. 왜냐하면 Session은 서버에 저장되기 때문에 Cookies와 달리 Cookies는 클라이언트 브라우저에 저장된다.따라서 쿠키는 비교적 위험하다. 만약에 클라이언트가 해커의 공격을 당하면 정보가 도둑맞기 쉽고 데이터도 왜곡될 수 있다.Session을 활용하면 이런 상황의 발생을 효과적으로 피할 수 있다.

2. 세션의 생명 주기


  1.언제 효력이 발생합니까
브라우저가 서버에 처음 접근할 때//주: jsp, 서브렛 같은 동적 자원에 접근할 때만 만들 수 있습니다.정적 자원에 접근할 때 이미지, html 같은 것은 만들지 않지만, Request를 통해 만들 수 있습니다.getSession(true)은 Session을 강제로 생성합니다.
  2.언제 효력을 상실합니까
1) 서버가 오랫동안 비활성 상태였던 세션을 강제로 제거하면 비활성 상태가 됩니다.Tomcat의 Session 유효 시간은 기본적으로 30분입니다.
2) invalidate 방법을 호출하여 서버 측의 모든 세션을 무효화합니다.request.getSession().invalidate();
  3.실효는 언제부터야?
세션이 활동하지 않을 때부터 시간을 재는 것인데, 실효 시간이 되면 세션이 지워진다.세션이 액세스되면 타이머가 0으로 표시됩니다.
  4.세션 비활성화 시간 설정
    1.web.xml에서 설정
1 
2     // timeout -1 , 
3     30
4 

 
    2.프로그램에서 설정
      request.getSession.setMaxInactiveInterval(-1)//참고: -1은 만료되지 않음을 의미하며 값 단위는 초 30분(30*60)
    3.Tomcat의 Context에서 기본 만료 시간 설정
 
1 defaultSessionTimeOut="3600" isWARExpanded="true" isWARValidated="false" isInvokerEnabled="true"   isWorkDirPersistent="false"/>

 
 
 

3. 세션의 작동 원리


세션은 서버에 저장되어 있지만 클라이언트에 대해서는 투명하며 정상적인 실행을 위해서는 클라이언트 브라우저의 지원이 필요합니다.이는 세션이 식별 표시로 쿠키를 사용해야 하기 때문이다.HTTP 프로토콜은 무상태입니다. 세션은 HTTP 연결에 따라 같은 고객인지 아닌지를 판단할 수 없기 때문에 서버는 클라이언트 브라우저에 JSESSIONID라는 쿠키를 보냅니다. 이 값은 세션의 id (즉 HttpSession.getId () 의 반환 값) 입니다.세션은 해당 쿠키에 따라 동일한 사용자인지 여부를 식별합니다.
이 쿠키는 서버에 자동으로 생성됩니다. 이 쿠키의 maxAge 속성은 보통 -1입니다. 현재 브라우저에서만 유효하고 각 브라우저 창 간에 공유하지 않으면 브라우저를 닫으면 효력을 상실합니다.따라서 동일한 시스템의 두 브라우저 창이 서버에 액세스하면 서로 다른 두 개의 세션이 생성됩니다.그러나 브라우저 창의 링크, 스크립트 등으로 열린 새 창(즉, 바탕 화면 브라우저 아이콘을 두 번 클릭하는 등 열린 창이 아니라는 뜻)은 제외됩니다.이러한 하위 창은 상위 창의 쿠키를 공유하므로 하나의 세션을 공유합니다.
참고: 새로 연 브라우저 창은 하위 창을 제외한 새 세션을 생성합니다.하위 창은 부모 창의 세션을 공유합니다.예를 들어, 링크를 마우스 오른쪽 버튼으로 클릭하고 팝업된 바로 가기 메뉴에서 새 창에서 열기를 선택하면 자식 창에서 부모 창의 Session에 액세스할 수 있습니다.
클라이언트 브라우저에서 쿠키 기능을 비활성화하거나 지원하지 않으면 어떻게 합니까?예를 들어, 대부분의 모바일 브라우저는 쿠키를 지원하지 않습니다.Java Web은 URL 주소 재작성 등의 다른 솔루션을 제공합니다.
URL 주소 재작성은 클라이언트에서 쿠키를 지원하지 않는 솔루션입니다.URL 주소 재작성의 원리는 해당 사용자Session의 id 정보를 URL 주소로 재작성하는 것입니다.서버는 재작성된 URL을 분석하여 Session의 id를 가져옵니다.이렇게 하면 클라이언트가 쿠키를 지원하지 않더라도 Session을 사용하여 사용자 상태를 기록할 수 있습니다.HttpServlet Response 클래스는 클라이언트가 쿠키를 지원하는지 자동으로 판단하는 encode URL(String URL)을 사용하여 URL 주소를 재작성합니다.클라이언트가 쿠키를 지원하면 URL이 그대로 패합니다.클라이언트가 쿠키를 지원하지 않으면 사용자 세션 ID가 URL에 다시 작성됩니다.
참고: TOMCAT가 클라이언트 브라우저가 쿠키를 지원하는지 판단하는 근거는 요청에 쿠키가 있는지 여부입니다.클라이언트가 쿠키를 지원할 수 있지만 처음 요청할 때 쿠키를 휴대하지 않기 때문에 URL 주소를 다시 쓴 주소에는 jsessionid가 있습니다.두 번째 접근할 때 서버가 브라우저에 쿠키를 썼기 때문에 URL 주소를 다시 쓴 주소에는 jsessionid가 없습니다.

좋은 웹페이지 즐겨찾기