cakephp - 会话变量保持奇怪的行为

时间:2009-05-16 18:43:09

标签: cakephp session-variables

由于无法理解的原因,包含客户名称的会话变量将在短时间内显示,然后消失。

在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)

一切都以同样奇怪的方式表现,它会在视图中显示一段时间,然后消失。关闭浏览器或再次登录时不会返回。对该代码的随机小改动似乎使其在短时间内恢复了生命。

6 个答案:

答案 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