2013-10-16 122 views
0

我試圖殺死用戶的前一個會話,然後再登錄:更多的上下文,我想阻止用戶在不同的瀏覽器或位置使用相同的用戶名/密碼登錄,阻止他們從跨瀏覽器操縱會話狀態(如遊戲的平衡)。跨瀏覽器:PHP的殺死會話

這是我到目前爲止已經完成,但沒有成功 1)獲取存儲在數據庫中的用戶登錄,用戶成功的最後SESSION_ID,保持在一個變量名爲$ old_session_id

2)嘗試使用下面的代碼

session_id($old_session_id); 
session_start(); 
session_destroy(); 

3)嘗試使用在session_start()

我所看到的是,新的開始新的,乾淨的,會爲用戶刪除最後一個會議會議不是開始 - 用戶註銷這兩個長者

任何幫助表示讚賞!

回答

1

PHP會話由客戶端計算機上設置的cookie標識,cookie不在瀏覽器之間共享。這是一個非問題。

#2中的代碼可能明確地將該用戶的會話當前會話ID更改爲先前瀏覽器中會話的會話ID,這會導致您嘗試解決的問題

此外,您只能通過每個請求調用session_start()一次,因此當然#3失敗。

總之,只是停止做你提到的所有問題,你的問題將解決自己。

0

一旦會話被銷燬,必須創建一個新的會話。

如果你只是想清除該會話的值,你也可以試試這個:

session_start(); 
$_SESSION = array(); //unset all session variables 
0

會話存儲在您的瀏覽器只所以如果你因此,如果你想看到如果用戶已經登錄其他瀏覽器,您需要使用數據庫

行添加到您的數據庫狀態1或0

1 =「在線」;

0 = 「離線」;

在登錄頁面檢查用戶狀態

如果1

$query=mysql_query("select status from table_name were username=$_POST['username']"); 
$status=$query['status']; 
if($status == 1) 
{ 
redirect him to a page saying the account is already logged in 
}else 
{ 
let him in and update the database status = 1 
} 

而在退出頁面 更新的用戶狀態爲0離線

,如果你只是想刪除所有的會話使用 使用會話把他先破壞然後開始會話再次開始導致你無法破壞會話而無法啓動它

session_start(); 
session_destroy(); 
session_start(); 

但是如果要刪除特定會話,則需要使用

unset($_SESSION['sessionname']);