2011-12-23 92 views
0

直到現在,我一直在Codeigniter中使用會話。但現在有一個會話的數據很多。我喜歡使用cookies,但它不適合我。無法獲取Cookie

  • 我首先在自動加載中加載cookie助手。
  • 我使用此代碼來添加數據$this->input->set_cookie('users_new',$users_new);
  • var_dump($this->input->cookie('users_new'));用這個我試圖獲取數據。但它是空的。變量$users_new填充了一個數組,因此它不能爲空。

當我嘗試這個簡單的例子時,cookie也是空的。

$cookie = array(
'name' => 'some_value', 
'value' => 'The Value' 
); 
set_cookie($cookie); 
var_dump(get_cookie('some_value')); 
die(); 

怎麼了?

感謝您的幫助!

回答

1

Cookie是由瀏覽器發送的,因此您必須等待用戶重新加載頁面。

所以基本過程是:

  1. 你設置一個cookie
  2. 用戶重新發送下一個請求餅乾
  3. 您可以訪問使用cookie值get_cookie

編輯:

setcookie使用這種方式,它不會與數組

setcookie("TestCookie", $value); 
setcookie("TestCookie", $value, time()+3600); /* expire dans 1 heure */ 
setcookie("TestCookie", $value, time()+3600, "/~rasmus/", "example.com", 1); 

這樣的工作,你應該做的:

foreach ($cookie as $key => $val) { 
    setcookie($key, $val); 
} 
+0

感謝您的評論!但重定向後var_dump(get_cookie('some_value'));給一個假的。但在控制器中,我做到了這一點:$ cookie = array( 'name'=>'some_value', 'value'=>'Value' ); set_cookie($ cookie); – JelleP 2011-12-23 11:34:43

0
  1. 你應該設定一個到期值,從中獲取的那一刻即秒創建時間將會過期。
  2. 「名稱」值必須是字符串,而不是數組。如果你想要多個信息,你只需要serialize()這個數組。

示例代碼:

$cookie = array(
    'name' => 'users_new', 
    'value' => serialize($users_new), 
    'expire' => '86500' 
); 

$this->input->set_cookie($cookie); 

你並不需要加載cookie的幫手,如果你只是使用的輸入類。沒問題,我知道,只是爲了避免無用的代碼行:)

0

餅乾不能容納數組,只是純文本。 @RageZ與for循環有很好的關係,它會設置許多cookie(與數組中的變量一樣多)。 @Damien建議使用「序列化」,另一種選擇是將jSon數組轉換爲帶有本機php函數「json_encode()」的數組str1