2014-04-12 5 views
0

내 코드, 여기java sessions - 실제로 세션이 언제 생성됩니까?

 HttpSession session = request.getSession(false); 
//   Details.l.info(" 1>>>>session ID is : " + session.getId()); 

     Details.l.info("["+this.getClass()+"]"+"request from "+request.getRemoteHost()); 

     if(session==null){ 
      session = request.getSession(true); 
      Details.l.info("["+this.getClass()+"]"+"Session Created!!!!!!!!!!!!!!!!!!!#####[email protected]@@@"); 
      Details.l.info(" 2>>>>>session ID is : " + session.getId()); 
     } 

     Details.l.info(" 3>>>>>session ID is : " + session.getId()); 
    // System.out.println("session ID is : " + session.getId()); 
     Details DTO = new Details(request); 
     String loc = DTO.findMyLocation(); 
       session.invalidate(); 

, 내가 세션이 이미 존재하는 경우, 그 특정 사용자 또는 세션 않는 경우 모자 세션 ID를 제공하는 논리와 서블릿의 시작에서 세션을 생성하고 이 특정 사용자가 존재하지 않는 경우 새 세션을 만든 다음 새 세션 ID를 제공하십시오. 여기서 새 세션은 IF 조건 내에서 만들어지며 가능한 모든 방법으로 테스트했습니다 (두 개의 다른 시스템을 사용하여 서블릿도 하나의 시스템에 있음)하지만, 컨트롤은 세션이 생성되는 루프에 결코 도달하지 못합니다. 하지만 서블릿에 충돌 할 때마다 새로운 세션 ID를 얻습니다. 누군가 내 서블릿의 동작을 exlain 할 수 있습니까 ?? 나는 세션과 서블릿에 매우 익숙하다 !! 미리 감사드립니다.

+1

때문에 session.invalidate(); – cproinger

+0

여기에 루프가 보이지 않습니다. 그리고 왜 그냥'getSession()'을 사용하지 않으시겠습니까? 아직 존재하지 않으면 세션을 생성합니다. –

+0

루프로 당신은 남자면 if (session == null) ??? –

답변

1

하는 JSP가 묵시적으로, 세션을 생성 :

서블릿은 항상 이미 존재하는 세션을 보는 이유
<%@ page session="false" %> 

. 브라우저 주소 표시 줄에 서블릿 주소를 입력하십시오 (게시 된 코드가 doGet() 메소드에있는 경우). JSP를 호출하여 호출하는 대신 서블릿에서 새 세션을 작성해야합니다.

EDIT : JSP가 세션에 참여하지 않도록 지정하는 데 사용할 수있는이 세션 속성에 대한 스펙에 설명되어 있습니다. JSP를 호출 할 때 어떤 세션도 생성되지 않는다는 것을 보장하지 않습니다. 단지이 JSP에서 세션에 액세스하려고하면 예외가 발생합니다.

+0

오케이 좋습니다. 지금 나는 그것을 얻는다, 나는이 꼬리표를 두어야한다? 나는 그것을 body 태그에 넣었다.이 태그를 배치 한 후에도 JSP 페이지가로드 될 때 세션이 생성되지 않지만 서블릿에 도달하면 세션이 이미 존재한다는 것을 알 수 있습니다. 만약 내가 다음 코드 와 함께 테스트입니다 (세션 == NULL) { \t \t \t \t에서 System.out.println ("아니오 세션!"); \t \t \t} 다른 { \t \t \t \t에서 System.out.println이 ("세션이 존재한다!"); \t \t \t} –

+0

"세션이 존재 함"이라는 메시지가 나타납니다. –

+0

이것은 JSP의 첫 번째 줄이어야합니다. –

0

항상 세션을 만들려면 request.getSession (true)을 사용하는 것이 좋습니다. 세션이 페이지 지시어에 false로 설정되어 있지 않으면

+0

요청이 서블릿에 도착할 때마다 세션을 생성하면 괜찮습니까? - 사용자가 내 페이지에 로그온하여 버튼을 클릭 한 다음 서블릿은이 사용자에 대한 세션을 생성하고 작업을 시작합니다.이 작업이 진행되는 동안 다른 사용자는 다른 컴퓨터에서이 페이지에 로그온하고이 버튼을 클릭합니다 (사용자 1의 세션이 여전히 진행되는 동안). 새로운 세시를 얻다. 시작과 비슷한 작업 ?? 이 두 작업이 동기화됩니까? (사용자 1이 수행하는 작업과 사용자 2가 수행하는 작업) ?? –

+0

각 사용자마다 하나의 세션이 생성됩니다. 동시에 작동 할 수 있습니다. –

+0

예, 이론적으로 나는 지금까지이 모든 것을 읽었습니다. 나는 그것을 실제로 경험할 수 없다. 무슨 일이 일어나고 두 작업이 막히게됩니다. –

관련 문제