繁体   English   中英

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

[英]Selectively Kick Out Logged-In Users After Banning Them

你好 StackOverflow 社区:

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

请注意,这个项目位于 CakePHP 中,我使用 Memcache 作为引擎来存储会话。 我已经尝试过 cakephp 频道中讨论的一个选项,如下所示:


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

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

  3. 它不起作用,用户仍然登录。 我很确定我必须销毁/使 cookies 无效,在这种情况下,可能无法更改其他用户 cookies,对吧?


跟进和解决方案:

我能够通过遵循这个来解决这个问题...... 远程销毁 php 中的 session(用户在其他地方登录)?

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

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 匹配,否则特定用户将无法注销。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM