2012-01-27 86 views
0

如果我想在當前用戶會話中取消設置一個變量,那麼我可以使用命令unset($_SESSION['something'])php - 這可能會從其他會話中取消設置一個變量嗎?

如果我知道PHPSESSID值(我可以在不更改當前用戶會話的情況下執行操作),是否可以從其他會話中只取消一個變量?我想檢查一下PHPSESSID的會話是否仍然存在,如果存在,則選擇PHPSESSID的unset($_SESSION['something'])

+5

這是可能的,但它不是直接或簡單。我建議這是不好的設計,一個用戶不需要在另一個用戶的會話中做任何事情。試着尋找一種不同的方式來解決任何你想解決的問題。 – deceze 2012-01-27 09:27:51

+0

你如何擁有多個會話? – 2012-01-27 09:29:18

+0

我有其他解決方案。我可以讓CRON接管會話並更改一個變量。 'SESSION_ID($ variable_PHPSESSID); session_start();'但我想以其他方式做到這一點。我認爲這可以以更簡單的方式完成。但我也會考慮重新組織我的腳本。 – Lucas 2012-01-27 09:34:35

回答

2

這是可能未設置在案件的其他會議只有一個變量,當我知道PHPSESSID值

是的,這是可能的,你需要知道會話的會話ID,你會喜歡從中取消設置變量/值。

我可以在不更改當前用戶會話的情況下執行此操作嗎?

如果你想用標準的PHP函數做到這一點,不切換會話是不可能的。藉助第三方庫,您可以做到不切換會話。

我想檢查一下PHPSESSID會話是否仍然存在,如果存在則選擇PHPSESSID的unset($_SESSION['something'])

這是非常相似的答案php destroy a session which is not the current session,但只能刪除特定成員:

$unsetFromSessionID = ... ; # set your session id from where you want to unset from 
$unsetVariableName = 'something'; # set the variable name 

$backupSessionID = session_id($unsetFromSessionID); 
session_start(); # load session data 
unset($_SESSION[$unsetVariableName]); 
session_commit(); # save changes to disc 

session_id($backupSessionID); # switch to current session 
session_start(); 

如果你想看看其他的會議是活躍與否,這是不可能的這種方法和PHP內部,因爲如果它不存在,PHP將在session_start()上創建一個新的空會話。

另一種方法是直接使用會話存儲,例如,通過在光盤上查找會話文件,加載它的內容,刪除一個變量並將其保存回來。一個能夠做到的PHP庫是Serialized,它附帶一個Session File Viewer的例子,這可能是一個很好的起點。

參見:How to tell if a session is active?

0

爲了更好的安全性,我知道這樣做並不是好事 - 感謝您對該問題的評論。那麼通過CRON任務可以更好地完成任務,而無需任何用戶訪問,對嗎?

session_id($variable_PHPSESSID); 
session_start(); 
unset($_SESSION['something']); 
0

如果要更改每個會話ID登錄,確保登錄過程中使用session_regenerate_id(真)。

session_start(); 
    session_regenerate_id(true); 
相關問題