【问题标题】:php - Is this possible to unset one variable from other session?php - 这是否可以从其他会话中取消设置一个变量?
【发布时间】:2012-02-20 07:37:16
【问题描述】:

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

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

【问题讨论】:

  • 这是可能的,但并不完全直截了当或容易。我建议这是一个糟糕的设计,一个用户不应该在另一个用户的会话中做任何事情。尝试寻找不同的方法来解决您想要解决的任何问题。
  • 您如何进行多个会话?
  • 我有其他解决方案。我可以让 CRON 接管会话并更改一个变量。 session_id($variable_PHPSESSID); session_start(); 但我想以其他方式做到这一点。我认为它可以以更简单的方式完成。但我也会考虑重新组织我的脚本。
  • 问题是拥有多个会话似乎是一种不好的做法。恕我直言,应该更好地利用努力重新实现整个事情。-

标签: php session


【解决方案1】:

如果我知道 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?

【讨论】:

    【解决方案2】:

    为了更好的安全性,我知道这样做不是一件好事-感谢问题下的 cmets。所以最好通过 CRON 任务来完成,无需任何用户访问,对吧?

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

    【讨论】:

      【解决方案3】:

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

         session_start(); 
         session_regenerate_id(true); 
      

      【讨论】:

        猜你喜欢
        • 2015-03-03
        • 1970-01-01
        • 2016-10-01
        • 2013-02-17
        • 1970-01-01
        • 1970-01-01
        • 2017-08-29
        • 2017-07-06
        相关资源
        最近更新 更多