2010-08-10 84 views
4

我是新來的PHP和我試圖建立一個網站。如果他閒置一段時間,我想註銷用戶會話。我搜索了網頁,但找不到合適的代碼。你如何檢查用戶是否閒置或不在PHP?任何人都可以幫助我。如何註銷會話,如果用戶空閒在PHP

回答

12

有幾個方法可以做到這一點。這裏有一對夫婦...

  • 設置會話終止時間,以便在一段時間後,會話過期並且不再有效。

  • 設置一個「時間」標誌作爲會話數據,並檢查他們的會話仍然是「足夠新」,讓他們在每個頁面加載登錄。

我會選擇第二個選擇,因爲它可能很難設置PHP正確的價值觀,使得安全會話過期,你希望它的方式。對於第二個選項,所有你需要做的就是確保會議將過期,你希望它之前,哪一個更容易。

代碼示例選項2:

//on pageload 
session_start(); 

$idletime=60;//after 60 seconds the user gets logged out 

if (time()-$_SESSION['timestamp']>$idletime){ 
    session_destroy(); 
    session_unset(); 
}else{ 
    $_SESSION['timestamp']=time(); 
} 

//on session creation 
$_SESSION['timestamp']=time(); 

編輯:

你的意見解釋說,你實際上是想保持在客戶端跟蹤鼠標事件和其他的東西來確定如果用戶閒置。這更復雜。我會給出一個通用的解決方案,然後提供一些有關優化和改進的建議。

要完成你所描述的東西,你必須跟蹤客戶方活動(鼠標移動,鍵盤敲擊等)和過程在服務器端信息。

跟蹤客戶方活動需要JavaScript事件處理程序。你應該爲每一個你想要算作「不閒置」的動作創建一個事件處理程序,並且保持它們最後一次閒置的時間(在一個javascript變量中)。

處理是在服務器端信息將要求您使用AJAX送他們最後一次一直閒置到服務器。因此,每隔幾秒鐘,您應該向服務器發送更新(使用JavaScript),該更新指定用戶閒置的時間。

一對額外的建議:

  1. 你不應該依賴於這個Ajax解決方案作爲唯一的方法來追蹤用戶活動,因爲有些用戶將無法啓用JS。所以,你也應該跟蹤頁面載入的用戶活動。因此,您可能不應該將空閒時間設置得太低(至少對於非JS用戶),因爲在發生頁面加載之前,非JS用戶不會向服務器發送任何數據。

  2. 你應該通過AJAX儘可能少地更新發送到服務器關於用戶活動的減少服務器上的需求。要做到這一點,只需讓javascript跟蹤用戶何時超時。如果它達到用戶即將超時的時間點(比如大約一分鐘左右),則然後只有才能ping服務器。

+1

你也可以使用一個計時器在JavaScript中,將帶你到此後的登錄頁面已啓用。 – jtbandes 2010-08-10 22:06:01

+0

incrediman 感謝您的答覆。但不檢查用戶是否閒置,如我們需要檢查鼠標事件等。它只是讓用戶在指定時間後註銷。 – sudh 2010-08-10 22:10:37

+0

@sudh:要做到這一點更復雜,並需要JavaScript。我會更新我的答案。 – Cam 2010-08-10 22:13:39

1

您可以配置PHP的配置爲session.cookie_lifetime,這會在空閒時間量後自動銷燬會話。
更多信息可以在這裏找到http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-lifetime

+0

+1謝謝。我需要將其設置爲最大值,然後確保我更頻繁地進行輪詢。我更新了這個問題,因爲我忘記指出我的PHP需要知道超時以更新數據庫。 – Mawg 2011-04-30 04:29:31

1

您可以使用session_cache_expire,我給你這個例子:

<?php 

/* set the cache limiter to 'private' */ 

session_cache_limiter('private'); 

$cache_limiter = session_cache_limiter(); 

/* set the cache expire to 30 minutes */ 

session_cache_expire(30); 

$cache_expire = session_cache_expire(); 

/* start the session */ 

session_start(); 

echo "The cache limiter is now set to $cache_limiter<br />"; 

echo "The cached session pages expire after $cache_expire minutes"; 

?> 

來源:php.net

+0

+1謝謝。我需要將其設置爲最大值,然後確保我更頻繁地進行輪詢。我更新了這個問題,因爲我忘記指出我的PHP需要知道超時以更新數據庫。 – Mawg 2011-04-30 04:29:58