2010-11-19 334 views
2

在php中,我使用用戶的id創建一個會話。所以我做列出用戶的Php會話並遠程登錄該會話

$_SESSION['id'] = $id; 

對用戶3說。有沒有辦法可以列出用戶3的所有會話?也遠程殺死會話(註銷)。我想給用戶提供類似gmail的地方,他們可以在其中查看他們賬戶的會話。我也希望允許他們遠程登出他們的用戶帳戶。我的網站大部分已完成,但這是我很不確定的事情。我甚至不確定Php是否支持這一點。我想要這樣做來加強安全。所以說有人去學校或某個地方忘了註銷,他們可以通過他們的賬戶從另一臺計算機上遠程執行。此外,我計劃在會議中存儲他們的IP,也是最後一次。所以它也可以列出IP地址,最後一次。如何做到這一點有任何線索?有沒有像這樣的PHP會話?

回答

5

您可以設置會話處理程序,將會話數據寫入數據庫。然後,您可以分析該表以找到具有相同ID的其他會話。

http://php.net/manual/en/function.session-set-save-handler.php

那會話的方式。但我建議自己實現這一點,因爲會話數據是序列化的,所以您必須閱讀所有會話,反序列化它並搜索一個鍵「id」。

你可以創建一個表(可以說)session-id,user-id,ip和time。每次用戶登錄時,都會在該表中添加一條記錄,並在每次請求時更新時間(類似於「上次看到的」)。 如果您想知道是否有其他用戶使用一個ID,只需選擇user-id列即可。 「合法」用戶可以通過session-id進行標識。 接下來,如果你想「遠程註銷」一個會話,你可以添加一列「force_logout」或其他東西。現在,在下一個請求(「非法」用戶的)請求下,讀取該標誌並終止會話。

+0

好主意。我得到你想說的話,如果用戶被禁止,我會檢查每個頁面的負載,然後我回顯出一個頁面,說他們被禁止,如果他們被標記爲禁止,則會死亡。所以如果會話是「非法」的,可以使用0表示主動,1表示不主動。所以如果它的0,回聲他們已經註銷,然後死亡。全部在全局頭文件中處理。我如何處理垃圾收集。另外,如果會話超時,如果他們再次登錄,是否可以獲得相同的會話ID? – Keverw 2010-11-19 01:38:55

+0

我也可以檢查,當我同時列出MySql結果時,該會話是否仍然活動?就像他們註銷,我可以告訴MySQL。但如果他們超時?我可以檢查會話是否仍然活動? – Keverw 2010-11-19 01:42:53

+0

您可以讀出* gx_maxlifetime'ini設置,並將其與* time * -column中存儲的值進行比較 – KingCrunch 2010-11-19 09:14:33

0

你可以保持SESSION_ID(通過SESSION_ID()函數得到它,而用戶登錄)在數據庫和遠程會話終止(通過REST例如)通過用戶ID使用下面的函數:

public function drop_session($session_id) { 
     if ($session_id) { 
      session_id($session_id); 
      //session_start(); 
      session_destroy(); 
      session_commit(); 
     } 
    }