2

最初に Cookie を作成したとき、次のページが読み込まれるまで同じ Cookie を取得できないようです。ページが 2 度目に要求されるまで、Cookie がブラウザに存在しないかのようです。

Kohana PHP フレームワークを使用しています。

Cookie::set('new_cookie', 'I am a cookie');
$cookie = Cookie::get('new_cookie');
//$cookie is NULL the first time this code is run. If I hit the page again
and then call Cookie:get('new_cookie'), the cookie's value is read just fine.

そのため、これは正常な動作であり、おそらく Cookie の仕組みを理解していないと思い込んでいます。誰かが私のためにこれを明確にすることができますか?

4

5 に答える 5

9

Cookie は HTTP ヘッダーに設定されるため、サーバーがページを返すとき。ページをリロードすると、ブラウザはそれらをサーバーに送り返します。

したがって、新しいリクエストの直後にそれらが「見える」のは完全に正常です。

サーバーからの応答の例を次に示します。

HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: name=value
Set-Cookie: name2=value2; Expires=Wed, 09-Jun-2021 10:18:14 GMT

(content of page)

ページをリロードすると、ブラウザから次のメッセージが送信されます。

GET / HTTP/1.1
Host: www.example.org
Cookie: name=value; name2=value2
Accept: */*

これが、ブラウザによる新しいリクエストの後にのみサーバーがそれらを見ることができる理由です。

于 2012-12-04T16:48:05.737 に答える
2

次のページが読み込まれるまで Cookie を使用できないと想定するのは正しいことです。Cookie はブラウザに保存され、ドキュメントがクライアントに送信された後に作成されます。クライアントがいずれかのページを再度ロード (またはリロード) すると、既存の Cookie がページ リクエストとともにサーバーに送信されます。

于 2012-12-04T16:49:56.327 に答える
1

はい、Cookie を設定する前に $_COOKIE グローバルが読み込まれるため、Cookie は後続のページの読み込み時にのみアクセスできます。

編集: https://stackoverflow.com/a/7455234/996876を参照してください

于 2012-12-04T16:49:10.420 に答える
0

クライアント (ブラウザー) は、何らかの要求への応答で新しい Cookie を確認します。その後、サーバーへの後続のすべてのリクエストでそれを送信します。はい、これは正常な動作です。

于 2012-12-04T16:49:01.397 に答える