2011-09-08 76 views
-1

是否可以取消設置特定的用戶會話(禁止訪問該網站的用戶)? 每個會話都包含用戶的用戶名。php session unset

或者是在數據庫中編寫會話並檢查用戶是否從該記錄中刪除的唯一方法?

感謝您的任何建議。

+0

http://php.net/manual/en/function.session-destroy.php用戶說明有一個解決方案 – 2011-09-08 20:59:19

回答

0

只需從數據庫中刪除用戶即可。

我假設你正在檢查登錄憑證。


您可以將超時添加到您的會議,像這樣:

define('SESSION_EXPIRE', 3600 * 5); //5 hours 
if (!isset($_SESSION['CREATED'])) { 
    $_SESSION['CREATED'] = time(); 
} else if (time() - $_SESSION['CREATED'] > SESSION_EXPIRE) { 
    session_regenerate_id(true); // change session ID for the current session an invalidate old session ID 
    session_destroy(); 
    session_start(); 
    $_SESSION['CREATED'] = time(); // update creation time 
} 
+0

是的,我檢查登錄憑證。但用戶仍然可以在該網站發表評論,直到會話處於活動狀態。 – Sergio

+0

@Sergio - 所以在所有會議中都要暫停。我把它添加到我的答案 – Neal

+0

@Sergio - 查看我添加到我的答案的會話超時。 – Neal

1

PHP不跟蹤已發出什麼樣的會話ID的 - 當一個會話cookie進來的請求,並在session_start ()被調用時,它會在會話保存目錄中查找以該會話ID(sess_XXXX)命名的文件並加載它。

除非您的登錄系統記錄了用戶的當前會話ID,否則您必須掃描保存目錄以查找包含用戶會話的文件,然後刪除該文件。幸運的是,它可以用簡單的東西來完成:

$session_dir = session_save_path(); 
$out = exec("rm -f `grep -l $username $session_dir/*`"); 

你可能想要的東西多一點安全/安全的,但是這是它的基本功能。

0

我認爲最好的方法是在允許用戶發表評論之前讓PHP讀取數據庫並檢查個人是否具有發佈權限。如果沒有返回錯誤。

你可以做的另一件事情,Facebook的做法是每隔幾分鐘就有一次AJAX調用檢查一個PHP文件。 PHP文件只是返回用戶是否登錄或關閉,如果他們註銷,Javascript會將其重定向到頁面之外。