2010-10-14 127 views
0

因此,我嘗試了很多很多事情,但仍然總是以Cookie的形式將持續時間設置爲「會話」,當使用Google Chrome中的開發人員工具查看時。這裏是我的當前設置:爲什麼我不能設置我的Cookie持續時間cakePHP

core.php中:

Configure::write('Session.cookie', 'session'); 
Configure::write('Session.timeout', '3600'); 
Configure::write('Session.start', true); 
Configure::write('Security.level', 'high'); 

users_controller.php中

$this->Cookie->write('xHi1PeWmAw', $user_record['User']['id']); 

我試圖改變Security.level,原因Session.TimeOut,使用$ this-> Cookie-> time = 3600;並綜合所有這些,但我似乎無法改變那段時間。此外,我嘗試了短暫和長期的持續時間,因爲我理想的情況是讓這個cookie持續儘可能長。你能告訴我我做錯了什麼嗎?

+0

你檢查,以確保前的cookie存在寫一個新的?否則,您可能每次都創建一個新的cookie,因此每次都會覆蓋過期時間。 – 2010-10-14 16:02:53

+0

是的,我沒有手動刪除cookie。實際上,我設法獲得了一個真正的持續時間,並且通過將Security.level置於中等水平不僅僅是一個「Session」cookie,但我仍然沒有真正理解所有這些背後的邏輯。 – 2010-10-14 16:11:47

回答

0

我有同樣的問題(CakePHP的1.3.7),現在,如果我把時間寫內()方法僅適用:

$this->Cookie->write ("cookie_name", "Some value", true, "+1 months"); 
0

儘管我不能保證這會解決您的問題,但我可以解釋如何正確配置會話。

首先你設置你的Security.timeout變量。這表示以秒爲單位的超時值,但這不等於您的會話到期時間。根據您的變量Security.level的設置,此數字乘以一個常數值。

'高'=×10, '中'=×100, '低'=×300,

這是給你的過期時間。例如,如果您的Session.timeout爲30,而且Security.level爲低,則您的會話將在30 * 300秒或150分鐘內過期。

+0

好吧,我確實得到了這個,但我沒有得到的是「在這種情況下,我的cookie將不再有一個真正的持續時間,但成爲一個'會話'cookie」...謝謝你嘗試。 – 2010-10-19 10:02:29

0

如果您使用cookies作爲會話,則時間設置爲0.這意味着它在瀏覽器關閉時設置爲過期。您可以嘗試在控制器中更改此號碼,如下面的代碼所示。看看這是否有所作爲。我沒有測試過這個,但它值得一試。

var $components = array('Cookie'); 
function beforeFilter() { 
    $this->Cookie->name = 'baker_id'; 
    $this->Cookie->time = 3600; // or '1 hour' //IF 0 THIS IS A SESSION COOKIE 
    $this->Cookie->domain = 'example.com'; 
    $this->Cookie->secure = true; //i.e. only sent if using secure HTTPS 
    $this->Cookie->key = 'qSI232qs*&sXOw!'; 
} 
相關問題