gpt4 book ai didi

php - 禁止后有选择地踢出登录用户

转载 作者:搜寻专家 更新时间:2023-10-31 21:44:25 27 4
gpt4 key购买 nike

你好 StackOverflow 社区:

这是一个棘手的情况。假设有 20 个用户登录到我的 webapp,而我,管理员,(从不同的计算机和浏览器)禁止了其中的 3 个,那么我如何踢出这 3 个登录用户我刚禁了?这似乎是删除他们的 session /cookie 的问题,但我如何知道要删除/使哪些 session 无效以及如何访问它们?

如你所知,这个项目在 CakePHP 中,我使用 Memcache 作为存储 session 的引擎。我已经尝试过在 cakephp channel 中讨论过的一个选项,它是这样的:


  1. 当用户登录时,他的 session_id(例如 sd19eIVasdokja021dnasd)与他的用户 ID(例如 db 中的那个:323)一起存储在 memcached 中。这样,用户的数据库记录与他在服务器中的 session_id 相关联。一些代码: Cache::write('user_session_id_' . $this->Auth->user('id'), $this->Session->id());

  2. 模型将用户的禁止列设置为 1 后,我查找是否存在具有用户 ID 的 Memcache 键,并从中检索 session ID。然后我删除 Memcache 键:
    if ($this->save(array('User' => array('id' => $userId, 'banned' => 1)), false)) {<br/>
    $userSessionId = Cache::read('user_session_id_' . $userId);<br/>
    if ($userSessionId !== false) {<br/>
    Cache::delete($userSessionId);<br/>
    Cache::delete('user_session_id_' . $userId);<br/>
    }
    }

  3. 它不起作用,用户仍处于登录状态。不过,我非常确定我必须销毁/使 cookie 无效,在这种情况下可能无法更改其他用户的 cookie,对吗?


跟进和解决方案:

我能够通过遵循这个来解决这个问题...... Remotely destroy a session in php (user logs in somewhere else)?

...还有这个(User 模型中的一点伪代码,实际上是从我上面的第二点演变而来的)(请注意,由于下面的第六行,我上面列出的第一点也是需要的) :

foreach ($bannedUsers as $userId) {  
if ($this->save(array('User' => array(
'id' => $userId,
'banned' => 1,
'ban_date' => date('Y-m-d H:i:s'))), false)) {
$userSessionId = Cache::read('user_session_id_' . $userId);
if ($userSessionId !== false) {
$Session->id($userSessionId);
$Session->write('Auth', '');
Cache::delete('user_session_id_' . $userId);
}
}
}

最佳答案

您的应用似乎有问题。 SESSION/COOKIE 系统的想法是存储的 SESSION id 在每个向服务器发出的请求的开头与浏览器发送的 COOKIE 相匹配。如果它们不匹配,应用程序将直接退出并显示登录页面。因此,如果您能够正确删除 SESSION id,则特定用户不可能不注销,除非您没有在每一页的第一行检查 SESSION/COOKIE 匹配.

关于php - 禁止后有选择地踢出登录用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6193916/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com