由于无法理解的原因,包含客户名称的会话变量将在短时间内显示,然后消失。
在app_controller.php中:beforeFilter()
if (isset($_SESSION['customer_name']) == false ||
strlen($_SESSION['customer_name']) == 0)
{
$customer = $this->Customer->read(null, $auth['User']['customer_id']);
$name = $customer['Customer']['fname'] . " " . $customer['Customer']['lname'];
$this->Session->write('customer_name', $name);
$this->set('name', $this->Session->read('customer_name'));
}
else
{
$this->set('name', $this->Session->read('customer_name'));
}
我尝试过检查会话是否设置的变体,例如
if ($this->Session->check('customer_name') == false)
一切都以同样奇怪的方式表现,它会在视图中显示一段时间,然后消失。关闭浏览器或再次登录时不会返回。对该代码的随机小改动似乎使其在短时间内恢复了生命。
答案 0 :(得分:2)
使用$this->Session->read()代替直接的$ _SESSION调用,因为cakephp可以将会话存储在原生PHP期望的其他地方。
另外,我真的不明白你的意思是'消失了一会儿',如果你留在同一页面上,只是继续点击刷新它会随机显示/消失吗?
关闭浏览器很可能是你的会话被销毁的原因,你也会在不同的浏览器上遇到这种行为吗?
你在app / config / core.php中的Session.*
次会话是什么?
答案 1 :(得分:1)
这解决了我们的问题:
if($this->Session->check('customer_name'))
答案 2 :(得分:0)
不确定问题是什么,但我首先要删除$ _SESSION调用。我也改变了
strlen($_SESSION['customer_name']) == 0
到
empty($_SESSION['customer_name'])
我能想到的另一件事是降低/config/core.php中的安全级别,也许你完全失去了会话?
答案 3 :(得分:0)
这一行:
$name = $customer['Customer']['fname'] . " " . $customer['Customer']['lname'];
允许$ name等于“”,这意味着它的strlen为1,并且不为空。不知道为什么它没有得到客户数据,但现在我可以检查该值。
答案 4 :(得分:0)
通常情况下,会议将在几分钟之后过期。在config / core.php文件中查找这一行:
配置::写入( '查看Session.Timeout'
并将其设置为999999999.这应该可以解决问题。
答案 5 :(得分:0)
请注意,有时FireFox扩展可能会导致会话重置。每次User-Agent更改时,会话都会重置。
我最近使用名为FirePHP的FireBug扩展程序遇到了这个问题:
http://blog.kevburnsjr.com/cakephp-session-error-user-agent-must-be-consistent