使用会话 ID 取消设置特定会话

Posted

技术标签:

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

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

用户只是这样陈述会话

session_id("usernumber");
session_start();

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

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

【问题讨论】:

快速查看文档会发现:session_unset() 用户登录的巫术方式?还是它只是打开带有会话处理程序的站点? 这条评论可以帮助你:php.net/manual/en/function.session-destroy.php#95809 【参考方案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 意味着任何匿名访问者都可以使用任何用户凭据轻松登录。

【讨论】:

以上是关于使用会话 ID 取消设置特定会话的主要内容,如果未能解决你的问题,请参考以下文章

如何在注销时取消设置特定的 php 会话

如何取消设置 laravel 会话数组

会话数组取消设置和删除行

取消设置 php 会话变量

单击时从会话数组中取消设置某些项目?

在 Yii2 中取消设置会话变量时遇到问题