gpt4 book ai didi

CakePHP 检查 session 存在于数据库中

转载 作者:行者123 更新时间:2023-12-04 14:16:26 26 4
gpt4 key购买 nike

我正在使用 CakePHP 2.2.1我正在尝试使用 Auth Component 改进我的用户身份验证.当用户尝试从多个位置登录时,他们会获得单独的 session ID,我想要做的是终止旧 session ,这样用户就不能同时从多个位置登录。

我使用这篇文章 cakephp prevent user login from multiple locations at the same time 转换了 CakePHP 保存 session 的方式。但是没有给出关于如何在创建新 session 时终止旧 session 的答案。

我考虑过创建一个 session 模型并使用它来选择记录,但我不确定这是否是一条安全的路线。

我还阅读了 Session Component 上的 CakePHP 文档。和 CakeSession 数据源希望可能有提示,但我找不到任何东西。

任何建议将不胜感激。

最佳答案

通常,您希望将 session 处理切换到数据库,以便在检测到同一用户使用不同的 session_id 登录时删除陈旧的 session 。

步骤,给你一个想法:

  • 将 session 处理切换到数据库
    Configure::write('Session.save', 'database');
  • 创建cake_sessions
    cd app         
    Console/cake schema create Sessions

    然后您将看到以下内容:
    Cake Schema Shell
    ---------------------------------------------------------------

    The following table(s) will be dropped.
    cake_sessions
    Are you sure you want to drop the table(s)? (y/n)
    [n] > y
    Dropping table(s).
    cake_sessions updated.

    The following table(s) will be created.
    cake_sessions
    Are you sure you want to create the table(s)? (y/n)
    [y] > y
    Creating table(s).
    cake_sessions updated.
    End create.
  • 假设您通过以下方式将 session_id 绑定(bind)到 user_id
    $this->Session->write('user_id', 123456);
  • 遍历 session 数据库中的 data 字段,如果相同的 user_id 进入您的站点并且使用不同的 session_id ,则删除该行。

    不幸的是,CakePHP 将 data 存储为 serialize() 数据。您将不得不遍历 cake_sessions 表中的每一行以查找要删除的序列化 user_id 中包含的匹配 data

    或者,只是为了给您一个想法,您可以使用以下 SQL 的近似方法来删除关联的行:
    DELETE FROM `cake_sessions` WHERE `cake_sessions`.`data` LIKE '%123456%';
  • 这样,拥有旧 session_id 的旧用户将无法以登录用户的身份继续访问该站点。
  • 关于CakePHP 检查 session 存在于数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11652493/

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