【问题标题】:Terminating another user's session in PHP在 PHP 中终止另一个用户的会话
【发布时间】:2018-04-19 08:06:15
【问题描述】:

当用户启动我的应用程序时,我使用 session_id() 请求 PHP 会话 ID 字符串。我将此会话 ID 字符串存储在 MySQL 表中。

该应用程序一次可以有数十人登录,我需要能够通过管理员使用的程序终止用户并列出所有活动用户。到目前为止,我还没有找到像terminate_session($session_id) 这样的函数,但我需要能够终止另一个 PHP 用户的会话。有没有简单的方法可以做到这一点?

添加了以下回复:(不是尖叫)
我不想自己用 mysql 表来做。我希望能够调用终止另一个用户的 php 函数......这可能吗?我知道我可以通过将其集成到应用程序表和程序中来自己完成。但是不想做更多的工作,我只想能够使用 session_id() 函数提供的 php session_id 字符串调用一个 php 函数,然后终止该进程。类似于 linux kill 命令。这在php中存在吗???谢谢

【问题讨论】:

  • 从数据库中删除行会破坏会话数据,没有看到代码,我不确定你是怎么遇到问题的。 你使用的是custom session handler吗?
  • 您可以根据您拥有的 id 删除会话文件,我没有尝试过,但我认为它会正常工作。但如果你真的需要这个,你应该按照@Scuzzy 的建议做
  • @Scuzzy 听起来不像是他将会话数据存储在数据库中,只是记住了 ID。
  • @Barmar 是的,我同意。您需要做的是将会话处理移动到 100% 数据库,并使用自定义会话处理程序写入/读取数据库,或者使用数据库表作为触发器来丢弃基于标准磁盘的会话。当用户加载页面时,您将查询您的表以获取您记录的会话 ID,如果它不存在,则调用会话销毁函数。我转向了数据库会话,而且使用起来更容易。

标签: php session terminate


【解决方案1】:

没有内置的 PHP 函数,但你有几个简单的方法。

如果您已经拥有要销毁的会话 ID,并使用 session.save_path 设置武装起来,那么您可以简单地删除会话文件如果您正在使用基于文件的会话。 p>

$session_id = 'mslpuu98uf1jumf2ervboioeq6';

$session_file = sprintf(
    '%s%ssess_%s',
    session_save_path(),
    PATH_SEPARATOR, 
    $session_id
);

unlink($session_file);

会话文件前缀sess_ 已经在 PHP 中硬编码了一段时间。

或者,这样的事情会起作用:

foreach ($sessionIdToDelete as $s) {
    $_COOKIE[session_name()] = $s;

    session_start();

    unset($_SESSION);
    session_destroy();

    session_write_close();
}

如果这将在使用活动会话的浏览器中运行,请确保在进入循环之前调用 session_write_close,并保留当前 session_id,以便您可以将其设置回 cookie。

【讨论】:

    猜你喜欢
    • 2018-11-03
    • 1970-01-01
    • 2013-06-17
    • 2013-06-03
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 2011-07-04
    相关资源
    最近更新 更多