2009-04-04 8 views
4

まずは、私はクッキーに精通しているわけではありませんが、どのように動作するのか知っています。 私はプレーンなPHPコードでかなりの数の異なるチュートリアルを見てきましたが、私はsymfonyの構文を使用してクッキーに配列を格納する方法の固体の例を探しています:Symfonyでクッキーにデータの配列を保存するにはどうすればいいですか?

$this->getResponse()->setCookie('myCookie', $data); 

あなただけで渡すことはできませんそれは文字列を期待しているので配列です。 最初に配列をシリアル化する唯一の方法はありますか?

クッキーにデータを保存する際に他のオプションはありますか?

答えて

3

配列がストアにのみ適用された場合にあなたがあなたのクッキー内のキー/値のセットに配列を変換することができます:

$this->getResponse()->setCookie('myCookie[0]', $data1); 
$this->getResponse()->setCookie('myCookie[1]', $data2); 
2

クッキーではなくセッションにデータを格納することをおすすめします。

PHPはこれを自動的にサポートしています。データを$_SESSION['key']に配置するだけで、そのユーザーがページを読み込んでも保持されます。

舞台裏では、PHPはPHPSESSIDのクッキーをクライアントに設定し、これを使用してWebサーバー上のデータを検索します。これは、クッキーを使用することとは異なる2つの利点があります

  1. データを改ざんすることはできません。クッキーは、クライアントによって変更、削除、または他の方法で変更することができます。重要な情報を保存するためにそれらを使用すべきではありません。
  2. 保存容量に制限はありません。
  3. セッションデータの保存には、さまざまなオプションがあります。彼らはディスクやmemcacheなどに移動できます。
  4. 配列やオブジェクトインスタンスなどの複雑な型を格納できます。

the PHP documentation on sessionsを参照してください。

+0

この応答は、*クッキーにデータを格納するの質問に答えることはできません。 – StampyCode

3

あなたが本当にクッキーにしていないで、それを格納する必要がある場合セッション、シリアル化を使用することができます:

$this->getResponse()->setCookie('myCookie', serialize($data)); 

$data = unserialize($this->getRequest()->getCookie('myCookie')); 
+1

もっと良い答え!ありがとう。注意すべきことは、特定の文字がセッションに格納されているエラーを避けるには、base64_encode()とbase64_decode()を使用する必要があるかもしれないということです。 http://stackoverflow.com/questions/2692371/storing-nested-arrays-in-a-cookie/2692391#2692391 – deadwards

関連する問題