2016-09-23 14 views
3

ローカルサーバーでは動作しますが、プロダクションサーバーでは動作しません。私は、そのサーバー上の問題を再現するコードの最小バージョンを作りました:

<?php 

if(!isset($_COOKIE['foo'])){ 
    setcookie('foo', 'bar', time() + 7*24*60*60, '/'); 
    echo "Cookie was not found, so we just created it."; 
} else { 
    echo "Cookie was found!"; 
} 

?> 

どんなに私はこのページを更新回数、私はいつも「見つかりません」というメッセージが表示されますありません。 $_COOKIE変数をログに記録しようとするたびに、空の配列が返されます。しかし:

  • クッキーは、ブラウザの中に存在し、正しく要求
  • で送信されたクッキーが
  • (それはpathの問題ではありません)同じファイルに設定され、読み込まれていないがありますsetcookie前出力、およびファイルはBOM

ずにUTF8でエンコードされた私は、コードをローカルで動作しますので、これは、サーバー構成の問題だと思うが、私はどこを見れには考えています。誰もこれを見たことがありますが、これを引き起こす原因を知っていますか?

さらに詳しい情報が必要な場合は、教えてください。私は質問に追加します。ありがとうございました!

+0

クッキーを飲み込むCDNおよび/またはキャッシングサーバー...? – deceze

+4

サーバのphp.iniで 'variables_order'指示文を確認してください。 'C'はそれに欠けていますか? http://php.net/manual/en/ini.core.php#ini.variables-order –

+0

@decezeワニスキャッシュが設定されていますが、このページはキャッシュされません。あなたはクッキーを飲み込むことができると思いますか? @Michael、あなたの提案をお寄せいただき、ありがとうございます。これはOKです: 'variables_order = EGPCS' – blex

答えて

1

キャッシュサーバーまたはCDNがある場合は、ホワイトリストに基づいてCookieをフィルタリングしている可能性があります。これは、キャッシュを改善するためです。ユニークなCookieを持つ各リクエストは、他のリクエストとは異なると見なされる必要があり、キャッシュできませんでした(キャッシュ・サーバーは、Cookieに基づいてサーバーから異なる応答を受け取る可能性があるため、以前のクライアントのキャッシュされた応答を提供します)。多くのサービスがサーバーに送信される可能性のあるCookie(たとえば分析パッケージ)を設定しているが、レスポンスの内容にはまったく影響しないため、すべてのCookieにデフォルトで完全に忠実にキャッシュされることがあります。

特に、Cookieに注意を払い、オリジンサーバーに転送するように、キャッシュサーバーを設定します。さまざまなCookieがある場合は、共通の接頭辞を付けてホワイトリストに追加することを検討してください(例:foo-*)。

+0

良い説明。また、私が新しいクッキーを必要とするたびに私の同僚に尋ねるのを避けるために、私に役立つプレフィックスについてのヒントをありがとう。 – blex

-1

あなたの問題はサーバーの時間だと思います。 time()関数で時間をチェックし、現地時間と比較してください。たぶんそのうちの1つが間違っています。

+0

あなたの答えをありがとうが、私は時間をチェックして、それは私のマシンのものと同じです – blex

0

私は同様の問題を抱えており、HAProxy構成の問題であることが判明しました。サーバーとユーザーの間にロードバランサがありますか?

+0

あなたの入力をありがとうそうであれば、私は同僚にそれについて尋ねるでしょう。 – blex

関連する問題