2009-05-16 74 views
1

由于我无法理解的原因,包含客户名称的会话变量将显示一会儿,然后消失。cakephp - 会话变量保持奇怪的行为

在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

我的答案是答案的问题,我经历,我我只是在等待StackOverflow来允许我设置它。 – 2009-05-18 04:46:30

回答

0

这条线:

$name = $customer['Customer']['fname'] . " " . $customer['Customer']['lname']; 

允许$命名为等于 “”,这意味着它具有1的strlen的,并且不为空。不知道为什么它没有得到客户数据,但现在我可以检查这个价值。

0

不是很确定问题出在哪里,但我会先删除$ _SESSION调用。我也想改变

strlen($_SESSION['customer_name']) == 0 

empty($_SESSION['customer_name']) 

我能想到的是降低在/config/core.php您的安全级别唯一的其他东西,也许你完全丢失会话?

2

使用$this->Session->read()而不是直接的$ _SESSION调用,因为cakephp可以将会话存储在原生PHP期待的地方。

此外,如果您停留在同一页面上,并且只是保持刷新状态,它会随机显示/消失,我并不能真正理解您'消失了一小会儿'的含义吗?

关闭浏览器很可能是您的会话被破坏的原因,您是否也在不同的浏览器上体验过这种行为?

什么是你的Session.*在app/config/core.php中的sessings?

+0

最初我使用从Session助手中读取和检查,但随着事情变得更加随机,我放弃了它。 – 2009-05-16 20:17:28

0

正常情况下,会话将在蛋糕中过几分钟后过期。看这条线在config/core.php中的文件:

配置::写( '查看Session.Timeout'

,并设置它喜欢999999999这应该解决的问题

+0

根据core.php中的注释,如果使用Session.security设置,则不使用Session.timeout。哪个矿被设置为高。 – 2009-05-18 04:46:01

+1

Session.timeout始终用作乘数。在core.php中查看上面的注释Security.level,你会看到数学。 – 2009-05-18 06:42:38

1

这解决了我们的问题:

if($this->Session->check('customer_name'))