【问题标题】:Prevent automatic logout cakephp防止自动注销 cakephp
【发布时间】:2013-01-07 19:09:35
【问题描述】:

我正在使用 cakephp 2 和 AuthComponent 在我的 web 应用程序上对用户进行身份验证。至关重要的是,用户不会在很长一段时间内自动退出(至少 24 小时、更长或无限最好)。原因是我们在 cakephp webapp 中存储了许多东西,这些东西必须在几秒钟内可供当前登录的用户使用,而无需强迫他输入密码。出于这个原因,我已经将Security.level 设置为low 并且我也实现了

Configure::write('Session.timeout', 3000);

这应该让用户在他退出之前有两天的时间。然而,有时用户仍然会被注销,即使他在同一分钟内已经处于活动状态。我真的不知道它何时发生以及如何重现它,但我想知道我是否可能遗漏了什么,其他策略可能有助于解决我的问题。

作为网络服务器,我在 Ubuntu 12.04 上使用标准 apache,没有任何特殊的配置更改!

【问题讨论】:

    标签: php cakephp logout


    【解决方案1】:

    为了让它有效地工作,您将分两部分进行。我无法具体说明您正在使用的组件,但我可以提供一般的操作理论。

    PHP 会话永远不应被视为会持续很长时间的事情。当用户在站点上时,它们将处于活动状态,但最终会被清除。那么如何让用户会话“永不过期”呢?

    当用户登录时,您将创建一个唯一的一次性哈希。此哈希将由用户作为 cookie 存储,您还应该在数据库中引用它(给与哈希关联的用户)

    此哈希提供了一个替代登录路径。如果用户返回站点并且没有会话,而不是将 定向到登录页面,您会查看用户是否有 cookie。如果有,您可以重新登录。

    现在重要的是只允许该哈希使用一次。使用哈希创建会话后,您需要生成一个新的,并使用新的哈希更新 cookie 和数据库。

    注意事项:

    • 哈希值应该是唯一的,并且是由随机数据生成的。它应该 不是可以轻易伪造的东西。
    • 如果用户使用多个设备访问您的站点,则可能每个设备都有自己唯一的哈希值,请记住 数据库设计。
    • 最好使用 SSL,这样哈希就不会被轻易嗅探。
    • 哈希应该在一定时间内过期,这样旧的哈希就不能用于登录网站。

    【讨论】:

    • 这是一个非常好的主意,我非常喜欢它,虽然用标准的 cakephp AuthComponent 很难实现。有两个问题:哈希应该有多长?如果创建了新会话,为什么必须重新生成它?
    • 长度不是问题,最重要的是唯一性,以及伪造哈希的难度。 md5($userid) 会很糟糕。它使哈希可预测。像md5(microtime()) 这样的东西可能会很好用。由于 cookie 存储在客户端上,因此它们可能会被第三方读取。您可以为用户获取哈希并登录,而无需他们的用户名或密码。如果哈希重新生成并且只允许使用一次,它会减少持久会话的安全风险。
    • 嗯,所以如果一个坏用户将 cookie 复制到他的浏览器,他将能够登录系统,因为 cookie 然后重新生成,真正的用户将被注销,因为他的 cookie现在不再有效。好吧,我认为这对我来说已经足够了!非常感谢!
    【解决方案2】:
    CREATE TABLE cake_sessions (
      id varchar(255) NOT NULL default '',
      data text,
      expires int(11) default NULL,
      PRIMARY KEY  (id)
    );
    

    然后在 core.php 中将会话设置更改为:

    Configure::write('Session', array(
        'defaults' => 'database',
        'timeout' => 43200,
        'cookieTimeout' => 43200
    ));
    

    此设置适用于 1 个月的会话

    【讨论】:

      猜你喜欢
      • 2015-06-30
      • 1970-01-01
      • 2016-02-03
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 2020-10-19
      相关资源
      最近更新 更多