最近我制作了三个Cake Apps,三个都分享了这个问题。配置主要是库存,我使用它作为会话选项。
Configure::write('Session', array(
'defaults' => 'php',
'cookie' => 'test'
));
经过大量的谷歌搜索,每个人都只是暗示安全级别太高,但我从未改变过这个值,它是:
Configure::write('Security.level', 'medium');
编辑:我也尝试过安全性低且没有变化。
我只使用基本身份验证来检查用户是否已登录。
登录后,cookie设置为三小时后过期,过期日期不会更新,直到我再次登录,这是正常的吗?
我似乎无法复制这个问题,有时我会登录,下一次点击会再次登出我,有时会持续一段时间。
我在Windows 7上使用Chrome,网站上没有AJAX。
有什么想法吗?感谢。
答案 0 :(得分:5)
您使用的是Ajax吗?这个问题只发生在IE吗?
IE使用不同的浏览器代理字符串来对浏览器本身进行Ajax调用。为了提高安全性,Cake检查浏览器代理,并且在IE的情况下,认为另一个浏览器试图劫持会话,因为代理是不同的。
您可以使用以下方法禁用此检查:
Configure::write('Session.checkAgent', false);
答案 1 :(得分:1)
遇到同样的问题后,我发现这是由Session.cookieTimeout值引起的。虽然php会话仍然有效,但会话cookie上的截止日期不会刷新。
这是我的会话配置
Configure::write('Session', array(
'defaults' => 'php',
'timeout' => 30, // The session will timeout after 30 minutes of inactivity
'cookieTimeout' => 1440, // The session cookie will live for at most 24 hours, this does not effect session timeouts
'checkAgent' => false,
'autoRegenerate' => true, // causes the session expiration time to reset on each page load
));
答案 2 :(得分:0)
您不是唯一一个在Chrome浏览器上遇到CakePHP会话问题的人。
Pixelastic编码员建议following fix,引用:
只需在session_custom.php
中创建名为app/config/
的文件,在其中删除以下行:
// Killing this config that was causing so much trouble with Chrome
ini_set('session.referer_check', '');
// No session id in url
ini_set('session.use_trans_sid', 0);
// Using custom cookie name instead of PHPSESSID
ini_set('session.name', Configure::read('Session.cookie'));
// Cookie like time, depending on security level
ini_set('session.cookie_lifetime', $this->cookieLifeTime);
// Cookie path
ini_set('session.cookie_path', $this->path);
然后在Configure::write('Session.save', 'session_custom');
文件中设置core.php
。
答案 3 :(得分:0)
问题在于会话:
首先检查你的'phpinfo();'
检查会话是否基于文件。
如果是,请完成整个过程。
创建一个新脚本文件(php),其中仅包含以下代码:<?php var_dump(session_save_path());?>
如果你得到null或空字符串就运行它然后去做这个过程:
chmod 777
。session_save_path('pathToxyz');
然后你就完成了。
如果会话设置为内存:不需要配置。他们只是使用系统内存。在这种情况下,你永远不会遇到这个问题。