2012-05-11 24 views
1

我目前正在嘗試使用php會話變量在我的網頁上顯示所有在線用戶。爲此,無論用戶何時登錄或註銷,數據庫中的列都被設置爲「聯機」或「脫機」。但是,這並不完全奏效,因爲當用戶關閉瀏覽器時數據庫不會更新(並因此破壞會話)。 那麼是否有另一種方法來檢查是否設置了某個sessionid?通過php會話變量檢查特定用戶是否在線

目前我設置會話是這樣的:

session_start(); 

$_SESSION['username']="Example Username"; 

從當前用戶的頁面檢查,如果有一個會話變量集合,我們可以簡單地使用:

if(isset($_SESSION['username'])) 
{ 
//username is set 
} 

但如果我們需要要檢查特定用戶是否在線,我們如何獲得所有已設置的會話變量的數組?例如

//Get all $_SESSION['username'] vars 

//loop through array and check for specific $_SESSION 

for($i=0; ...) 
{ 
    if($_SESSION['username'][$i] == "User 1") 
    { 
    //do something 
    } 
} 

從所有我到目前爲止看,似乎沒有成爲一個辦法讓你的網頁上的所有會話的數組.. 那麼,有沒有的做,例如更好的辦法Facebook,Twitter等如何處理這些東西? 感謝您的幫助!

回答

4

一種解決方案是除了記錄用戶上次訪問任何網站資源的在線/離線標誌之外,還在數據庫中存儲時間戳。那麼你可能會認爲他們在15分鐘後離線或其他常數值。

另一種解決方案是玩這裏的回調http://php.net/manual/en/function.session-set-save-handler.php我認爲你可以處理gc回調並在數據庫中設置離線標誌。

如果您在那個頁面上搜索class SessionDB或去here看起來有人已經在自定義類中實現了這個版本!

+0

謝謝,我將通讀這一點。 – user1199434

-1

你可以試試這個:

foreach ($_SESSION as $sessionKey => $sessionValue) 
{ 
    if($sessionKey == 'username') && ($sessionValue == 'User 1') 
    { 
    //do something 
    } 
} 
+0

嗯,這可悲的沒有工作..謝謝反正,雖然:) – user1199434

+0

OP的問題是寫「做某事」的一部分。 Jon再次讀到這個問題。在該代碼中甚至沒有foreach語句的用法,只需檢查'username'鍵是否已設置就可以了,並檢查它的值。 –

+0

對不起 - 關於這個問題的一部分:「我們如何獲得所有已設置的會話變量的數組?」 –

0

你可以使用一個簡單的更新查詢

比如你有一個表的用戶和你有一列名爲狀態(在線/離線)

您的login.php使用

<?php 
//your user verification code 
if(variable that holds your sql query){ 
$user_status=('UPDATE user SET status= online WHERE email="'your user email selector'") 
} 

然後註銷做了SIM卡ilar腳本只是將在線值更改爲離線