2011-06-09 46 views
3

我有一個cookie問題,我的cookie上的失效日期總是被設置爲會話結束,這不是我想要的。我做了一些護目鏡,它建議設置到期時間()+ 60 * 60 * 24 * 30,我已經完成了。codeigniter cookie到期問題

//Create basket cookie 
      $cookie = array(
       'name' => 'basket_id', 
       'value' => $basket_id, 
       'expire' => time()+60*60*24*30, 
       'domain' => 'domain', 
       'path' => '/', 
       'prefix' => '', 
      ); 
      set_cookie($cookie); 

我確實懷疑它是否可以降低到Codeignter設置,但我的ci_session cookie有正常的失效日期。星期四,2011年6月9日10時39分02秒GMT

這是我所得到的,當我查看該cookie:

Name basket_id 
Value 28 
Host .host 
Path /
Secure No 
Expires At End Of Session 

這裏是我傳遞到cookie數組的一個例子。

Array ([name] => basket_id [value] => 30 [expire] => 1310202067 [domain] => host [path] =>/[prefix] =>) 

回答

4

您可以嘗試在config.php CI會議最初保存在cookie來調整會話過期時間:

/** Session Variables 
--------------------------------------- 
| 'session_expiration' = the number of SECONDS you want the session to last. 
| by default sessions last 7200 seconds (two hours). Set to zero for no expiration. 
| 
*/ 

$config['sess_expiration']  = 7200; 
+2

我不認爲這真的回答了這個問題。調整會話過期時間並不是真正的解決方案,因爲直接設置cookie過期變量不會導致反映手動設置的cookie過期日期的輸出。相反,閱讀這個解決方案,這對我工作:http://stackoverflow.com/a/15886879/1351605 – TARKUS 2014-03-17 13:43:50

+0

我同意你,如果你想保存一些信息,會持續到會議過期後,因此,如何答案是錯的,@ sn0r答案是更好的答案。 – Nassim 2015-04-10 13:24:22

4

您的到期日設置不正確。 您不必包含時間(),因爲您設置的實際上是從時間()開始的到期日期。

當你有一個不正確的過期值時,它默認爲0,它被設置爲你的會話長度。

因此它應該是:

  $cookie = array(
      'name' => 'basket_id', 
      'value' => $basket_id, 
      'expire' => 86400*30, 
      'domain' => 'domain', 
      'path' => '/', 
      'prefix' => '', 
     ); 
0

您可以添加PARAMS

$config['cookie_lifetime'] = 1800 
在config.php

,你可以在圖書館/會話/ session.php文件找到原因,下面

代碼
$expiration = config_item('sess_expiration'); 

if (isset($params['cookie_lifetime'])) 
{ 
    $params['cookie_lifetime'] = (int) $params['cookie_lifetime']; 
} 
else 
{ 
    $params['cookie_lifetime'] = (!isset($expiration) && config_item('sess_expire_on_close')) 
     ? 0 : (int) $expiration; 
}