【问题标题】:Unset a specific session using session id使用会话 ID 取消设置特定会话
【发布时间】:2011-10-05 22:33:22
【问题描述】:

我是该站点的管理员。我想取消设置特定会话,我知道它的会话 ID

用户只是这样陈述会话

session_id("usernumber");
session_start();

假设用户 A 的用户号为“123” 我想销毁用户 A 的所有值,用户 A 将其设置为 session_id("123"); 后不会重新生成 sessio_id();

如何取消只为用户 A 销毁?

【问题讨论】:

标签: php session sessionid


【解决方案1】:

没有对会话处理程序进行逆向工程......

<?php

session_id($_GET['killsid']);
session_start();
session_destroy() || die "failed to kill";

【讨论】:

  • 工作正常。虽然,@Hardik Sondagar 的代码更适合安全实施。
【解决方案2】:

Answer by Jack Luo on php.net

$session_id_to_destroy = 'nill2if998vhplq9f3pj08vjb1';
// 1. commit session if it's started.
if (session_id()) {
    session_commit();
}

// 2. store current session id
session_start();
$current_session_id = session_id();
session_commit();

// 3. hijack then destroy session specified.
session_id($session_id_to_destroy);
session_start();
session_destroy();
session_commit();

// 4. restore current session id. If don't restore it, your current session will refer     to the session you just destroyed!
session_id($current_session_id);
session_start();
session_commit();

【讨论】:

  • 这个很棒。正是我想要的,这样您就可以将其他人踢出系统。
【解决方案3】:

您可以尝试获取 session_save_path() (在此目录中存储会话文件)。 当您使用默认会话名称时,文件名看起来像 sess_jgimlf5edugvdtlaisumq0ham5 其中 jgimlf5edugvdtlaisumq0ham5 是用户会话 ID,因此您可以取消链接此文件,除非您没有编辑这些文件的权限。

【讨论】:

  • 有效!公共函数 drop_session($session_id) { unlink(session_save_path() . '/sess_' . $session_id); }
  • 这应该是公认的答案!它不需要开始会话。干净利落! +1
【解决方案4】:

据我所知,使用默认会话处理程序执行此操作的唯一受支持方法是使用 session_id("usernumber"); 模拟用户,然后删除这些值。

您也可以store sessions in a database,这将使这一切变得非常简单,但您需要编写自己的会话处理代码。

顺便说一句,会话 ID 应该是一个您无法猜测的长随机字符串。使用123 意味着任何匿名访问者都可以使用任何用户凭据轻松登录。

【讨论】:

    猜你喜欢
    • 2016-11-30
    • 1970-01-01
    • 2011-12-13
    • 2017-01-06
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多