2011-03-24 6 views
1

페이지에서 사용자 동작없이 세션 만료시 (자동) 페이지를 리디렉션하는 방법?세션 만료시 자동으로 리디렉션

+1

페이지 특정 시간 초과입니까 아니면 일반 세션 시간 초과입니까? I.E. 누군가가 페이지에 착륙 한 순간부터 타이머를 시작하거나 세션이 만들어지면 타이머를 시작합니까? ajax를 사용하여 서버를 핑 (ping)하여 확인할 수 있습니다. 또는 페이지마다 페이지 당 메타 새로 고침 시간을 설정 하시겠습니까? – Alex

+0

내가 아약스를 부를 때마다 타이머와 Ajax 함수를 서버에 호출하면 세션이 다시 생성됩니다. ..? 세션을 다시 생성하지 않고 세션 변수에 액세스하는 방법은 무엇입니까? – SSN

+0

세션을 처음 시작할 때 세션 변수를 만들면 session_start()를 호출하여 언제든지이 변수 타이머를 확인할 수 있습니다. 그리고 나서 $ _SESSION [ 'timer']을 검사한다. 타이머를 재설정하지 않으면 타이머가 재설정되지 않습니다. – Alex

답변

6

사용자가 활동 중일 때마다 점검하고 (mouseclick, keypress) 활동 확인기를 작성하고 사용자가 활동 중일 때 세션을 유지하기 위해 서버 측에 하트 비트를 수행하고 사용자가 활동하지 않을 때 아무것도하지 않음 유효한. 30 분 동안 아무런 활동이 없거나 서버 측에서 기본 세션 시간 제한이 설정되어 있으면 리디렉션을 수행하십시오.

click 및 keypress 이벤트를 연결하고 ajax 요청을 실행하기위한 jQuery의 도움이 거의없는 킥오프 예제입니다.

<script src="http://code.jquery.com/jquery-latest.min.js"></script> 
<script> 
    $(document).ready(function() { 
     $.active = false; 
     $('body').bind('click keypress', function() { $.active = true; }); 
     checkActivity(1800000, 60000, 0); // timeout = 30 minutes, interval = 1 minute. 
    }); 

    function checkActivity(timeout, interval, elapsed) { 
     if ($.active) { 
      elapsed = 0; 
      $.active = false; 
      $.get('heartbeat'); 
     } 
     if (elapsed < timeout) { 
      elapsed += interval; 
      setTimeout(function() { 
       checkActivity(timeout, interval, elapsed); 
      }, interval); 
     } else { 
      window.location = 'http://example.com/expired'; // Redirect to "session expired" page. 
     } 
    } 
</script> 

은 기본적으로 그냥 다음 /heartbeat에서 수신하고 수행하는 Servlet 만들기 :

@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) { 
    request.getSession(); 
} 

살아 세션을 유지하기 위해.

+0

실제로 가장 좋은 답변 중 하나는 +1000이어야합니다. –

관련 문제