2011-06-16 135 views
1

如果半小時內沒有任何活動,我希望我的用戶自動離開該站點。 (代碼您在下面看到設置爲70秒而不是1/2小時)。 我意識到,我需要的是使用jQuery ...這是我極其新...來加載我的PHP腳本。 (我一直在這方面工作太久)這是我迄今爲止。使用jQuery調用php註銷腳本

這是在我的頁面的頭部。

var log_me_out = true; 
setTimeout(function(){ 

    $.post({ 
     url: "check_time.php", 
     //data: optional, the data you send with your php-script 
     success:function(){ 
      if(log_me_out == 'yes'){ 
       window.location = 'index_test.php'; 
      } 
     } 
    }) 
}, 80000); 
</script> 

這是我check_time.php頁

<script type="text/javascript"> 
var log_me_out = true; 
</script> 
<?php 
include('pagetoretrivepassword.inc.php'); 

    session_start(); 
    if($_SESSION['admin_login'] != $password){ 
     session_unset(); 
     session_destroy(); 
     ?> 
     <script type="text/javascript"> 
     log_me_out = 'yes'; 
     </script> 
     <?php 
    }else{ 
     ?> 
     <script type="text/javascript"> 
     log_me_out = 'no'; 
     </script> 
     <?php 
    } 

?> 

回答

1

你對你的php文件寫的JavaScript將不被執行。 知道你的PHP腳本做,使用代碼:

的Javascript:

$.post('check_time.php', function(data) 
{ 
    if(data == 'yes') 
    { 
     window.location = 'index_test.php'; 
    } 
}); 

PHP的:

session_start(); 
if($_SESSION['admin_login'] != $password) 
{ 
    session_unset(); 
    session_destroy(); 
    echo 'yes'; 
} 
else 
{ 
    echo 'no'; 
} 
2

那麼它看起來對我好,但我會建議一個有點簡化。最好的方法是使用setTimeout函數中的代碼,並在其中檢查用戶上次活動的時間。因此,建立像「lastActive」,並使用類似的變量:

$(document).click(function(){ 
    var currentTime = new Date(); 
    lastActive = currentTime.getSeconds();   
}); 

然後在你的setTimeout函數,你做這樣的事情:

var currentTime = new Date(); 
if(lastActive + 5000 < currentTime.getSeconds()){ 
    //If user hasn't been active for 5 seconds... 
    //AJAX call to PHP script 
}else { 
    setTimeout(theSameFunction(),5000); 
} 

然後在你的PHP只需銷燬會話,成功回調函數應該只需要:

window.location = 'index_test.php'; 

要發送用戶的方式。

+0

我很困惑!前兩個腳本都不起作用(cfillion,js1568)。我不明白湯姆沃爾特斯的最後一個劇本。我真的不需要計算時間,因爲會話正在計時,我相信我所需要做的就是檢查會話數據嗎? – PeggyMe 2011-06-16 18:03:41

+0

對,我的腳本使用這個邏輯:當用戶點擊頁面時,它決定它們是活動的,並在最後一次點擊發生時記錄。然後經過一段時間後,一個函數會檢查最後一次交互是否超過,在這種情況下是5秒前,如果是,則調用PHP腳本。假設頁面需要會話數據來知道用戶何時查看頁面,PHP只需銷燬當前會話。那有意義嗎? – 2011-06-16 19:12:40

0

您的代碼需要返回可解析的內容,例如JSON,XML或HTML。例如,您check_time.php改變輸出這樣的:

<?php 
include('pagetoretrivepassword.inc.php'); 

    session_start(); 
    header('Content-type: application/json'); 
    if($_SESSION['admin_login'] != $password){ 
     session_unset(); 
     session_destroy(); 
     json_encode(array("log_me_out"=>"true"); 
    }else{ 
     json_encode(array("log_me_out"=>"false"); 
    } 
?> 

編輯你的HTML包括這行jQuery代碼:

setTimeout(function(){ 
    $.post("check_time.php", function(d){ 
      if(d.log_me_out){ 
       window.location = 'index_test.php'; 
      } 
    }); 
}, 80000); 
+0

我一直在這方面工作太久。我原來的代碼有很多問題。這是我最新的代碼,但它不起作用 – PeggyMe 2011-06-20 16:34:26

0

這個問題在這裏解決是最後的工作代碼

代碼在主頁:

ini_set('session.gc_maxlifetime',1800); 
ini_set('session.gc_probability',1); 
ini_set('session.gc_divisor',1); 
session_start(); 
if($_SESSION['admin_login'] != $password){ 
    header('Location: index.php'); 
    exit(); 
} 
if(isset($_SESSION['last_activity']) && (time()-$_SESSION['last_activity'] >1800)){ 
// last request was more than 30 minates ago 
session_destroy(); // destroy session data in storage 
session_unset();  // unset $_SESSION variable for the runtime 
    header('Location: index.php'); 
    exit(); 
} 
$_SESSION['last_activity'] = time(); // update last activity time stamp 
?> 


<script src="jquery.min.js" type="text/javascript"></script> 
<script type="text/javascript">  
    function timedCount(){   
     $.ajax({ 
      type: 'POST', 
      url: "check_time.php", 
      success: function(data){ 
      if (jQuery.trim(data) == "LOGOUT") { 
     window.location = 'LOGOUT.php'; 
      } 
      } 
     }); 
     setTimeout("timedCount()",10000); 
    }; 

</script> 


Here is the code on the check_time.php page 


<?php 

    session_start(); 
    if (isset($_SESSION['last_activity'])){ 
     if(time() - $_SESSION['last_activity'] > 1800){ 
      session_unset(); 
      session_destroy(); 
      echo "LOGOUT"; 
     } 
    }else{ 
     echo "LOGOUT"; 
    } 
?>