我在CakePHP中构建了一个应用程序,允许用户登录并做一些事情,它让用户登录大约24小时,我认为默认情况下。这是由会话/ cookie处理的,因为cookie也会被创建......
1。)那么记得我带给派对的是什么?正如所做的那样,创建一个设置超时并保持用户登录的另一个cookie ...但是默认情况下,每个应用程序都存在此功能,会话权限正确吗?但我已经看到很多网站都在这样做,但我不明白为什么会议开箱即用:/
2。)即使用户继续使用网站,会议如何到期?例如如果我将它设置为1分钟但每30秒刷新一次它仍然会过期...但我保持网站活动才能过期,那么它怎么还能过期?这很烦人,因为我有一个1小时的应用程序到期,但即使客户端使用该网站,它会在1小时后过期,无论活动如何。
如果有人能回答这两个问题,那就太棒了。
更新:我已经为此创造了一笔赏金,希望能让CakePHP专家帮助解决这个问题。问题是会话在用户交互超时后失效。我想要做的是说我有一个持续5分钟的会话,并且用户每30秒进行一次回发,然后该会话将在5分钟后仍然存在。目前情况并非如此......
Configure::write('Session', array(
'start' => true,
'defaults' => 'php',
'timeout' => 1,
'cookieTimeout' => 1,
'autoRegenerate' => true
));
答案 0 :(得分:8)
它带来的是,如果用户关闭其浏览器并重新启动它,它仍会自动登录。会话cookie不是这种情况,因为只要浏览器关闭就会删除这样的cookie。
也许您每30秒访问一次的页面没有启动会话。在这种情况下,不使用会话机制,会话的到期日期不会重置为now + 1 minute
。或者刷新只能访问浏览器缓存,而不是服务器。
答案 1 :(得分:8)
好的,让我们看看我是否可以获得一些赏金(战利品?),同时也测试我的解释技巧:)
所以让我们从#1开始。
那么记得我带给派对的是什么?
这里要区分的是“会话cookie”与“记住我的cookie”之间的区别。
由于HTTP是stateless protocol,会话cookie用于将多个请求绑定到单个用户。没有它,对您的网络服务器的每个请求都与其他所有请求完全无关。你能想象没有会话编写应用程序吗?每个请求都是空的,没有登录,没有会话变量。每个请求都是未知用户!这基本上意味着没有Web应用程序!
现在,重要的是要意识到你绝对不希望你的会话持续24小时!在我的书中,这是一个非常大的禁忌。会话越短,它就越安全(至少在理论上)。为什么?因为session can be hijacked!你的会话越长,被劫持的可能性就越大。
例如,想象一下银行应用程序。此外,假设您的用户正在公共PC上访问它(我们的用户不是最聪明的用户)。所以他正在管理他的帐户或其他......他的电话响了。作为一个白痴,他接听电话并离开,没有退出。您希望会话在5分钟,15分钟或24小时内到期吗?不了解你,但对于像网上银行一样重要的事情,我希望那次会议尽快消失。
继续“记住我”部分。
因此,会话cookie在一个会话中“连接”多个请求,“记住我”cookie的作用是什么?简单来说:它将多个会话绑定到一个用户。
您希望您的网站使用起来轻松愉快,登录几乎从不令人愉快。在做你真正想做的事情之前,你每次都要做的事情只是一个烦人的事情。记得我的饼干消除了这种烦恼。
您登录一次,选中此框,现在您始终登录该PC上的 。这就是为什么在共享PC上从不使用“记住我”功能的原因,因为下一个人将拥有您的身份。 合法地。这就是为什么记住我的cookie也存在安全隐患,它们可能像会话cookie一样被劫持。
最后,会话cookie和记住我的cookie之间存在一个重要区别:expiration。会话cookie通常在您关闭浏览器时(或在您明确指定的时间之后)到期,而记住我的Cookie通常会持续更长时间。
即使用户继续使用会话,会话如何到期 网站?
为简单起见,他们不。您必须更改cake(或您的应用程序)处理会话的方式。答案必须在代码中的某处。你在这里没有得到满意答案的原因是因为我们看不到你的代码。您只需调试并跟踪您的cookie会发生什么。 JB Nizet给了你一些建议。
我知道可能会在某些服务器上造成问题的一件事就是蛋糕的安全级别。尝试在/Config/core.php
:
Configure::write('Security.level', 'medium'); // or 'low'
如果这没有帮助,那么答案肯定在你的代码中。我希望这个答案能帮助你朝着正确的方向前进!
答案 2 :(得分:1)
1。)会话cookie和“记住我”之间的区别在于会话cookie的到期日期为“0”。这意味着“浏览器关闭时过期”。而“记住我”给出了一个特定的到期日期,比如说从现在起一个月,到同一个会话cookie。这是唯一的区别。你可能会认为这种功能上的差异是微不足道或毫无意义的,但请考虑一下:在家里我不想每天晚上都去打电话给那个该死的雅虎!帐户,而在工作中我不想每次去小便时都要删除我的饼干。
2。)即使在使用应用程序时,会话cookie也不会过期。你在什么情况下以及在什么情况下看到这种行为?这是错误的。
答案 3 :(得分:1)
了解安全设置与超时相结合的组合,这是一个非常重要的部分。当安全性设置在较高级别时,会话可能会在您预期之前被终止。
使用内部蛋糕会话商店进行该测试。这样本地系统配置就不会影响它。可能是PHP设置覆盖了Cake中的设置。所以将会话存储设置为Cake。这将创建一个包含您可以控制的会话的目录。
同样,它是服务器设置的组合,并期望Cake的配置覆盖这些服务器设置。
答案 4 :(得分:0)
如果我这样做:
Configure::write('Session', array(
'start' => true,
'defaults' => 'cake',
'timeout' => 1,
'cookieTimeout' => 1,
'autoRegenerate' => true
));
/**
* The level of CakePHP security.
*/
Configure::write('Security.level', 'high');
它解决了这个问题!因此会话持续10秒,但如果我每2-3秒刷新一次,那么我将在10秒后登录,因为cookie正在刷新。所以我的托管环境的PHP设置似乎正在导致会话/ cookie过期......为什么会发生这种情况呢?