0

私の質問を見てくれてありがとう。

コード:

$array = array("zero","one","true","three");
echo $beforecookie = serialize($array); //<<-- IT WORKS;
print_r(unserialize($beforecookie)); //<<--IT WORKS

setcookie('mycookie', $beforecookie, time()+3600);
echo $aftercookie = $_COOKIE['mycookie']; // <<-- it works perfectly same with $beforecookie

$data = unserialize($aftercookie);
print_r($data); //<<--RETURN NOTHING (the problem)
var_dump($data); //<<-- RETURN bool(false);

Cookieから取得した文字列(配列からシリアル化されたもの)をシリアル化解除することはできません。なぜ?serialize()で配列をCookieに設定した後、配列を元に戻すにはどうすればよいですか?または多分私は何かを逃した?

助けてくれてありがとう。

4

5 に答える 5

1

このコード:

setcookie('mycookie', $beforecookie, time()+3600);
echo $aftercookie = $_COOKIE['mycookie'] // <<-- it works perfectly same with $beforecookie

設定したCookieは、ブラウザがページを更新するまでコードで使用できません。

また、本当にこれを実行したい場合は、サーバー側のシークレットとCookieに保存するデータの内容に基づいたチェックサムをCookieに追加してください。調べてくださいhash_hmac()。信頼できないソースから受け取った値を盲目的に逆シリアル化することは、単に無責任です。

于 2013-03-21T13:27:07.320 に答える
1

base64_encode()関数の後に使用する必要がありますserialize()

セットする:

setcookie('name', base64_encode( serialize( $arr ) ) );

得る:

unserialize( base64_decode( $_COOKIE['name']) );
于 2013-07-10T08:46:17.263 に答える
0

スクリプトの実行後にCookieが設定されるため、ページを再読み込みする前にCookieにアクセスすることはできません。

于 2013-03-21T13:22:48.687 に答える
0

コードのこの部分のみを変更できます。

if(!$_COOKIE['mycookie']){
setcookie('mycookie', $beforecookie, time()+3600);
}

次に、ページをリロードします...

于 2013-03-21T13:25:41.960 に答える
0

クッキーをすぐに利用できるようにしたい場合(他の人が言ったようにページを更新した後ではない)、追加するだけです

$_COOKIE['mycookie'] = $beforecookie;

この行の直後

setcookie('mycookie', $beforecookie, time()+3600);

あなたのクッキーはすぐに利用可能になります:-)

于 2013-03-21T13:58:09.827 に答える