2013-05-30 2 views
0

저는 아약스를 사용하는 웹 앱을 가지고 있으며 일부 데이터를 업데이트하기 위해 10 초마다 실행합니다. PHP 세션을 60 분 동안 사용하지 않으면 php 세션이 종료되어 사용자가 페이지에서 빠져 나올 수 있지만이 페이지에서는 세션이 만료되지 않습니다. Ajax 호출이 매 10 초마다 실행되고 서버가 새로 고침하기 때문에 세션이 만료되지 않는 것으로 추측합니다. "시간 초과", 내 세션 아약스를 실행하지 않는 다른 페이지에서 잘 작동합니다. 자네들 아약스가 매 10 초마다 전화를 걸기 때문에이 페이지에서 내 문제가 있다고 생각하니?아약스 전화로 인해 PHP 세션이 끝나지 않습니다

내 jQuery 코드 :

당신이 X 시간 이후 세션을 종료하고자 할 경우
delay(function(){ 
     check(); 
    }, 10000); 

    function check() 
    { 
     $.ajax({ 
     dataType: "json", 
     url: "lead.php", 
     cache: false, 
     success: function(msg){ 
      //Do something 
     } 
     }); 
    } 
+4

확실한 질문에 답변하셨습니다. 문제가 ajax가있는 페이지에서만 발생하고 10 초마다 요청을 보내면 실제로 시간 초과가 다시 설정됩니다. 세션 시간 초과를 수동으로 추적하여이를 수정할 수 있습니다. – Aneri

+1

상황에 대한 설명을 바탕으로 문제에 대한 평가가 정확 해 보입니다. 우리가 해결하도록 도울 수있는 질문이 있습니까? –

+0

도움 주셔서 감사합니다. 세션 추적을 유지하려면 어떻게해야합니까? 아니면 30 분 동안 사용하지 않으면 세션을 종료 할 수 있습니까? –

답변

1

, 아약스 요청하지만, 사용자가 페이지에 활동이없는 경우에만 수행 할 수 있습니다 만들어지고있는 경우에 상관없이

1) 사용자 0.5 분 (30 초 후에 사이트 2)로 로그인) 오 : 그래서이 함수의 논리는 이것이다

(function() { 
    // After 30 minutes without moving the mouse, the user will be redirect to logout page 
    var time2refresh = 30; 
    // This is how many time the user has to be inactive to trigger the countdown of 30 minutes 
    var timeInactive = .5; 
    // This will store the timer in order to reset if the user starts to have activity in the page 
    var timer = null; 
    // This will store the timer to count the time the user has been inactive before trigger the other timer 
    var timerInactive = null; 
    // We start the first timer. 
    setTimer(); 
    // Using jQuery mousemove method 
    $(document).mousemove(function() { 
      // When the user moves his mouse, then we stop both timers 
     clearTimeout(timer); 
     clearTimeout(timerInactive); 
      // And start again the timer that will trigger later the redirect to logout 
     timerInactive = setTimeout(function() { 
      setTimer(); 
     }, timeInactive * 60 * 1000); 
    }); 
    // This is the second timer, the one that will redirect the user if it has been inactive for 30 minutes 
    function setTimer() { 
     timer = setTimeout(function() { 
      window.location = "/url/to/logout.php"; 
     }, time2refresh * 60 * 1000); 
    } 
})(); 

: 내가 사용이 코드를 사용 f 비활성 1 분 30 초 카운트 다운이 시작됩니다. 3) 사용자가 마우스를 움직이면 두 타이머가 모두 재설정되고 첫 번째 타이머가 다시 시작됩니다. 4) 30 분이 지난 후에도 사용자가 마우스를 움직이지 않으면 로그 아웃 페이지로 리디렉션되어 세션이 닫힙니다.

+1

훌륭한 코드, 코드를 사용 하겠지만 mouseover 대신에 .click 이벤트가 있습니다. –

+0

@HelderAlvarez를 해결책으로 표시하는 것을 잊지 마세요.) – Cito

0

lead.phpsession_start()을 사용합니다. 해당 파일에서만 제거 할 수 있습니다.

첫 번째 초기화시 현재 시간을 세션 var에 저장 한 다음 각 호출에 대해 한 시간 이상 경과했는지 확인합니다. true 인 경우 session_destroy()

관련 문제