同じCookie名でsetcookie()
を2回呼び出すと、2つのCookieが作成されます。
既存のCookieをどのように更新しますか?
Cookie自体を更新することはできませんが、上書きすることはできます。そうでなければ、これはあなたが探しているものです: http://php.net/manual/en/function.setcookie.php
できます。そのページの「よくある落とし穴」を必ず読んでください。
スーパーグローバル$_COOKIE['cookie_name']
も使用して、Cookieを読み書きできます。
Setcookie()関数を使用してCookieの値を更新できますが、4番目の引数に「/」を追加する必要がありますこれは「path」引数で、同じ名前の別のCookieが作成されないようにします。
すなわちsetcookie('cookie_name', 'cookie_value', $exp_date, '/');
そのため、PHPは2つのSet-Cookie:ヘッダーを送信するように指示された場合、最後のヘッダーのみがブラウザーに保持されます。
Netscape Cookieの仕様 http://curl.haxx.se/rfc/cookie_spec.html のコメント:
同じパスと名前のインスタンスは互いに上書きされ、最新のインスタンスが優先されます。同じパスで異なる名前のインスタンスは、追加のマッピングを追加します。
ただし、このようなエッジ条件を回避することをお勧めします。既に送信されたCookieをオーバーライドする必要がないように、アプリケーションを再構築します。
echo
呼び出しの前にsetcookie
がないことを確認してください。 setcookie
はヘッダーを介してブラウザと通信します。以前にecho
を呼び出した場合、header + bodyは既に送信されており、サーバーはヘッダーを介してブラウザにsetcookie
を送信できません。そのため、機能していないと思われるかもしれません。
この場合の警告を報告するphpサーバーログファイルには、次のような行があるはずです。
DEFAULT: PHP Warning: Cannot modify header information - headers already sent by (output started at /path/to/your/script.php:YY) in /path/to/your/script.php on line XX