2015-01-26 56 views
0

如何創建實時PHP會話控制?我的意思是,當用戶登錄時,我創建了一個PHP會話($_SESSION[]),並將它存儲在一個表(MySQL)中,但是如何知道用戶何時註銷?我明顯可以檢測到用戶何時註銷並銷燬會話,但如果用戶從未單擊,會發生什麼情況註銷如何在會話關閉時檢測到該問題?
謝謝!PHP實時會話控制。怎麼樣?

+1

每次用戶在您的網站上進行交互時,都可以更新您的表格的時間,並將那些沒有充當註銷的用戶更新。 – harrrrrrry 2015-01-26 20:07:29

+1

你沒有。您可以使用每隔* n *秒自動刷新一次的隱藏框架,使用「心跳」或其他方法生成圖像或其他東西的ajax – 2015-01-26 20:07:59

+1

會話在定義的超時(默認爲24分鐘)後自動失效。會話cookie也可以配置爲當瀏覽器窗口關閉時而不是在上一次請求之後終止。 – Dai 2015-01-26 20:08:05

回答

1

這是一個常見問題。當用戶不單擊註銷按鈕時,會話將再次可用。通常情況下,垃圾收集器會在定義的時間後清理會話。

http://www.wikihow.com/Create-a-Secure-Session-Managment-System-in-PHP-and-MySQL

這裏是一個很好的教程如何建立一個MySQL的會話處理程序。所以讓PHP管理這個部分。

重要組成部分,是在這裏:

<?php 
// set our custom session functions. 
session_set_save_handler(array($this, 'open'), 
array($this, 'close'), 
array($this, 'read'), 
array($this, 'write'), 
array($this, 'destroy'), 
array($this, 'gc')); 

// This line prevents unexpected effects 
//when using objects as save handlers. 
register_shutdown_function('session_write_close'); 
?> 

您定義清理您的會話功能的最後一個陣列。

-1

我有這個問題,但我解決了通過創建另一個ID,所以我不必使用SESSION ID(我認爲它不安全),所以每次用戶登錄我的系統時,他會得到另一個ID,我的函數檢查如果用戶有權檢查數據庫上的用戶標識,該用戶標識也保存在我的會話中,以檢查它是否與我的數據庫上的標識相同。

我認爲這是另一個安全措施,以確保我只有一個用戶登錄實例,並且直到現在我都沒有問題。

但是,如果您必須知道用戶何時斷開了您的系統,這將無濟於事。