使用会话 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 取消设置特定会话的主要内容,如果未能解决你的问题,请参考以下文章