2017-12-06 24 views
0

私はクッキーに配列を格納しようとしています。配列の商品アイテムをクッキー配列に格納していますが、エラーが発生します。php:クッキーに配列を追加する

$products = array(); 
    $item = array($id => $name); 
    print_r($item); 
    $products[] = $item; 
    setcookie('products',json_encode($products),strtotime('+1 day')); 
    var_dump($_COOKIE['products']); 

上記コード印刷

アレイ( [4] =>ラグラット)
注意:未定義のインデックス: Dにおける製品:\ XAMPP \ htdocsに\プロジェクト\含みますライン上の\クラス\ products.php
NULL

答えて

3

クッキーは、クライアントに応答が送信されるときに設定されます。つまり、次のリクエストまでPHPコードからアクセスすることはできません。 setcookie()関数のセクションを参照してください。一般的な落とし穴:

クッキーが表示されるはずのページを次回読み込むまで表示されません。クッキーが正常に設定されたかどうかをテストするには、クッキーが期限切れになる前に、次のローディングページでクッキーが存在するかどうかを確認します。失効時間は、失効パラメータを介して設定されます。クッキーの存在をデバッグするには、単にprint_r($ _ COOKIE);を呼び出すだけです。

だから、

http://php.net/manual/en/function.setcookie.php

、あなたecho何もしない限り、または応答ヘッダが送信されます何かを行うページを更新した後、あなたはvar_dump編クッキーの内容が表示されるはずです。あなたのコードでは、setcookie()が呼び出される前にprint_r($item);があるので、恐らくheaders already sentという警告が出ているので、そのクッキーは設定されません。

一つの方法または別のは、それがインデックスが本当に設定されている場合など$_GET$_POST$_COOKIE、同様にあなたが常にisset()またはarray_key_existsに確認する必要があり、特にスーパーグローバルでは、配列のインデックスが設定されていることを前提とすることはまれ安全です。

+0

私は、cookieを更新するためにajaxを使用しています。各リクエストで同じエラーが発生します。最初のリクエストだけではありません。私は最初のリクエストの後でページをリロードしようとしましたが、それはajaxリクエストに対して同じエラーを投げます。 –

+0

'setcookie()'の前に 'print_r'を呼び出しています。 'print_r()'を削除すると、クッキーは今動作するはずです。 –

関連する問題