0

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

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

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

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

4

2 回答 2

0

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

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

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

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

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

需要记住的一些事项:

  • 散列应该是唯一的,并使用随机数据生成。它不应该是可以轻易伪造的东西。
  • 如果用户使用多个设备访问您的站点,则每个设备可能都有自己唯一的哈希,请在数据库设计中记住这一点。
  • 使用 SSL 是一个好主意,这样哈希就不会被轻易嗅探。
  • 哈希应该在一定时间内过期,这样旧的哈希就不能用于登录站点。
于 2013-01-07T19:21:08.413 回答
0
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 个月的会话

于 2014-10-28T16:38:19.273 回答