1

出于我无法理解的原因,包含客户姓名的会话变量会出现一小会儿,然后消失。

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

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

4

6 回答 6

2

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

另外,我真的不明白您所说的“消失一会儿”是什么意思,如果您停留在同一页面上并继续点击刷新,它会随机显示/消失吗?

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

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

于 2009-05-16T20:06:30.853 回答
1

这解决了我们的问题:

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

于 2012-10-10T12:23:04.273 回答
0

不太确定问题出在哪里,但我会从删除 $_SESSION 调用开始。我也会改变

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

empty($_SESSION['customer_name'])

我能想到的唯一另一件事是降低 /config/core.php 中的安全级别,也许你完全失去了会话?

于 2009-05-16T19:11:34.123 回答
0

这一行:

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

允许 $name 等于 " ",这意味着它的 strlen 为 1,并且不为空。不知道为什么它没有获取客户数据,但现在我可以检查该值。

于 2009-05-16T20:13:03.693 回答
0

通常会话将在蛋糕几分钟后到期。在 config/core.php 文件中查找这一行:

配置::write('Session.timeout'

并将其设置为 999999999。这应该可以解决问题。

于 2009-05-18T01:53:16.530 回答
0

请注意,有时 FireFox 扩展可能会导致会话重置。任何时候 User-Agent 改变,Session 都会被重置。

我最近使用名为 FirePHP 的 FireBug 扩展遇到了这个问题:
http ://blog.kevburnsjr.com/cakephp-session-error-user-agent-must-be-consistent

于 2010-03-03T23:44:19.807 回答