4

私はいくつかの配列データを Cookie に保存する必要があり、それを行うための最良の方法を研究してきましたserialize

PHP 配列を文字列化してクッキーに保存する方法

..「シリアル化すると、シリアル化されたクラスのコンストラクターが呼び出されます。コード実行を引き起こす可能性があるため、これは悪いことです。」

だから私は他にどんな選択肢があるのだろうか?どうbase64_encodeですか?

sessionsブラウザを閉じた後もデータを保持する必要があるため、使用できません。4KBCookieの制限も心配ですが。

FWIW 誰かのカートに保存されているもののショッピング カート データを保存しています。戻ってきたときにカートに戻す必要があります。

4

3 に答える 3

5

一意の ID を生成して Cookie に保存し、シリアル化された配列と ID をデータベースに保存するのはどうですか?

例:

// ------------ STORING TO COOKIE AND DATABASE ------------ //
$id = uniqid();
setcookie("id", $id, time()+60*60*24); // 1 day

$serialized = serialize($array);
mysql_query("INSERT INTO yourTable (id, array) VALUES ('$id', '$serialized')");


// ------------ SELECTING FROM DATABASE ------------ //
if(!isset($_COOKIE['id'])) die();
$id = mysql_real_escape_string($_COOKIE['id']);

$result = mysql_query("SELECT array FROM yourTable WHERE id = $id LIMIT 1");
if(!is_resource($result)) die();
$serialized = mysql_result($result, 0);
$array = unserialize($serialized);
于 2012-07-08T10:57:34.360 に答える
4

以前のコメントと回答を拡張すると、データベース行への ID などのdata へのポインターとは対照的に、データが Cookie に保存されるのを避けるために本当に一生懸命努力する必要があります。

すべてのクライアントが敵であると仮定すると (これは合理的な仮定だと思います)、間違った Cookie (悪意のあるものであろうと、単にバグのあるものであろうと) は、ポインターしか含まれていない場合、大きな害を及ぼすことはできません。

  • 無効: 黙ってドロップする
  • 間違い: ID を要求しているユーザーと比較して確認します。だったら黙って捨てる
  • 有効; これを使って

私は個人的に、エラー メッセージをサイレント ドロップすることを好みます。

于 2012-07-08T11:05:48.550 に答える
0

クッキーはユーザーデータを保存する最良の方法ではありません ユーザーはサイトで承認されている必要があり、すべてのデータは user_id によってデータベースに保存されている必要があります

于 2012-07-08T11:04:34.767 に答える