php - 这是否可以从其他会话中取消设置一个变量?

时间:2012-01-27 09:23:52

标签: php session

如果我想在当前用户会话中取消设置一个变量,那么我可以使用命令unset($_SESSION['something'])

如果我知道PHPSESSID值(我可以在不改变当前用户会话的情况下这样做),是否可以从其他会话中仅取消设置一个变量?我想检查PHPSESSID的会话是否仍然存在,如果存在,则选择PHPSESSID unset($_SESSION['something'])

3 个答案:

答案 0 :(得分: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?

答案 1 :(得分:0)

为了更好的安全性,我知道这样做并不是件好事 - 感谢您提出的问题。所以CRON任务更好,没有任何用户访问权限,对吗?

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

答案 2 :(得分:0)

如果要在每次登录时更改会话ID,请确保在登录过程中使用session_regenerate_id(true)。

   session_start(); 
   session_regenerate_id(true);