防止自动注销cakephp

时间:2013-01-07 19:09:36

标签: php cakephp logout

我正在使用cakephp 2和AuthComponent来验证我的webapplication上的用户。用户不要在很长一段时间内自动注销(至少24小时,更长或无限最好)至关重要。原因是我们在cakephp webapp中存储了许多内容,这些内容必须在几秒钟内可供当前登录的用户使用,而不必强迫他输入密码。出于这个原因,我已将Security.level设置为low,我也实施了

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

应该在用户退出前两天给用户一个好处。然而,即使用户已经在同一分钟内处于活动状态,用户仍会不时退出。我真的不知道它什么时候发生以及如何重现它但是我想知道我是否可能错过了一些东西,其他策略可能有助于解决我的问题。

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

2 个答案:

答案 0 :(得分:0)

为了使其有效运作,您将分两部分进行此操作。我不能专门讲你正在使用的组件,但我可以提供一般的操作理论。

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

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

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

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

要记住的一些事情:

  • 哈希应该是唯一的,并使用随机数据生成。这应该 不是一件容易伪造的东西。
  • 如果用户使用多个设备访问您的网站,则每个设备可能都有自己唯一的哈希值,请记住这一点 数据库设计。
  • 使用SSL是一个好主意,因此无法轻易地嗅探哈希值。
  • 哈希值应在一定时间内到期,以便旧的哈希值不能用于登录该站点。

答案 1 :(得分: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个月的会话