如果我想在当前用户会话中取消设置一个变量,那么我可以使用命令unset($_SESSION['something'])
。
如果我知道PHPSESSID值(我可以在不改变当前用户会话的情况下这样做),是否可以从其他会话中仅取消设置一个变量?我想检查PHPSESSID的会话是否仍然存在,如果存在,则选择PHPSESSID unset($_SESSION['something'])
。
答案 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的例子,这可能是一个很好的起点。
答案 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);