2009-05-16 71 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'))