2014-05-20 2 views
0

하나의 thing.i를 구현하고 싶습니다. 여러 탭에서 내 사이트를 열었습니다. 한 탭에서 작업하는 동안 다른 탭은 타임 아웃되지 않아야합니다. 살아 있어야합니다. 다른 탭을 유지하는 법. 나는 유휴 시간 로그 아웃을 찾기 위해 js 이하를 사용했다.같은 브라우저에서 여러 탭을 열어도 세션을 활성 상태로 유지하는 방법

<script type="text/javascript"> 
idleTime = 0; 
$(document).ready(function() { 

    //Increment the idle time counter every minute. 
    var idleInterval = setInterval("timerIncrement()", 60000); // 1 minute 

    //Zero the idle timer on mouse movement. 
    $(this).mousemove(function (e) { 
     idleTime = 0; 
    }); 
    $(this).keypress(function (e) { 
     idleTime = 0; 
    }); 
}) 

function timerIncrement() { 
    idleTime = idleTime + 1; 
    if (idleTime > 2) { // 30 minutes 

     var beforeTime = new Date() 
     var bminutes = beforeTime.getMinutes(); 
     var bseconds = beforeTime.getSeconds(); 
     var user='<?php echo Auth::getSessionUserFullName();?>'; 
     if(user!='') 
     { 
      var timehours=beforeTime.getHours(); 
      var timeoutmin=bminutes+1; 
      var timeoutseconds=bseconds-1; 
      if(timeoutseconds>59) 
      { 
       timeoutseconds=0; 
       timeoutmin=timeoutmin+1; 
      } 
      if(timeoutmin>59) 
      { 
       timeoutmin=0; 
       timehours=hours+1; 

      } 
      if(timehours>24) 
      { 
       timehours=0; 
      } 
      var ok=confirm("Your session expire time started at "+beforeTime.getHours()+":"+beforeTime.getMinutes()+":"+beforeTime.getSeconds()+".Please click 'OK' before "+timehours+":"+timeoutmin+":"+timeoutseconds+" to stay signed in."); 
     if(ok) 
     { 
      var currentTime = new Date() 
      var aminutes = currentTime.getMinutes(); 
      var aseconds = currentTime.getSeconds(); 
      var time=aminutes-bminutes; 
      if(aminutes>bminutes && aseconds>bseconds) 
      { 
       alert('Time out!!Please login again to access.'); 
       window.location.href='<? echo APPLICATION_WEBROOT?>auth/logout'; 
       return false; 
      } 
      else if(time>=2) 
      { 
       alert('Time out!!Please login again to access.'); 
       window.location.href='<? echo APPLICATION_WEBROOT?>auth/logout'; 
       return false; 
      } 
      else 
      { 
       return true; 
      } 

     } 
     else 
     { 
      window.location.href='<? echo APPLICATION_WEBROOT?>auth/logout'; 
     } 
     } 
    } 

} 
</script> 

도와주세요. 열려있는 모든 탭에 대한 세션을 유지하는 방법 사전에 축하합니다.

+1

에서 세션을 유지하기 위해 가능한 방법이 될해야하지만

은 내가하지 않은 많은 일을있을 수 있습니다 당신은 단순히 할 수 없습니다. 브라우저 탭은 다른 브라우저 탭에 대해 알지 못합니다. – Jon

+0

확인. js를 제거하는 동안 어떻게 구현할 수 있습니다. – Krishna38

답변

0

세션이 탭과 관련이 없습니다. 이것은 전체 브라우저 인스턴스를위한 것입니다.

사용자가 서버에 요청하면 세션이 확장됩니다. 따라서 응용 프로그램에 따라 해당 세션을 확장하기 위해 서버에 대한 정기적 인 요청을 생성해야 할 수 있습니다.

이 경우 setInterval javascript 함수를 사용하여 PHP 백엔드에 대한 AJAX 호출을 트리거 할 수 있습니다. 도움이

희망 ...

BTW : 일부 브라우저는 사용자의 초점 (예를 들어, 크롬)이없는 탭을 비활성화 않기 때문에주의 -이 세션을 수정하지 않습니다를 ...하지만 일부 JS 일시 중지 될 수 있습니다.

+0

사실 세션은 일반적으로 클라이언트에서 서버로 보내는 각 요청에서 보낸 쿠키로 구현됩니다. 그런 다음 서버는 새 만기 날짜가있는 새 쿠키로 응답합니다. 만료일이 지나면 쿠키가 전송되지 않으므로 세션이 닫힙니다. –

+0

만료되지 않고 AJAX 요청을 보낼 필요가 없을만큼 세션의 만료 시간을 짧게 설정하는 이유는 무엇입니까? 서버를 갱신하여 세션을 갱신 하시겠습니까? 그러나 요청을로드 서버 측면을 일으킬 것입니다, 나는 더 나은 솔루션을 귀하의 purpopse 합리적인 시간 제한을 연장하는 것입니다 생각합니다. –

+0

@ArdiGoxhaj 글쎄, 5 분마다 서버에 요청을 보내면 서버에 과부하가 걸리지 않을 것입니다 (특히 당신이 호출하는 동작이 CPU 비싸지 않아야하기 때문에). 긴 시간 제한을 설정하면 간단한 페이지의 문제를 해결할 수 있지만 웹 응용 프로그램에는 충분하지 않습니다. 세션이 만료되어 일을 잃어 버리면 사용자는 꽤 짜증을냅니다 (웹 메일에 작성한 전자 메일을 이미 잃어 버렸습니까?). –

0

내가 생각할 수있는 방법 중 하나는 서버에서 직접 세션을 처리하는 것입니다. IP가 고유 식별자 인 상태

1) 서버 DB의 사용자 정의 세션을 저장 :

여기에 (환영 개선 제안)을 작동 할 수있는 시스템입니다.

2) 사용자가 서버와 상호 작용할 때마다 IP를 가져 와서 서버에 저장된 해당 세션을 업데이트하십시오. 해당 세션이 이미 시간 초과 된 경우 사용자를 시간 초과 페이지로 리디렉션하십시오. 를 통해,하지만 내 마음이 당신이 (자체 의심스러운 선택이다)이 같은 시간 제한을 구현하는 경우 탭

관련 문제