web-dev-qa-db-ja.com

PHPでCookieを更新するにはどうすればよいですか?

同じCookie名でsetcookie()を2回呼び出すと、2つのCookieが作成されます。

既存のCookieをどのように更新しますか?

23
Cookie

Cookie自体を更新することはできませんが、上書きすることはできます。そうでなければ、これはあなたが探しているものです: http://php.net/manual/en/function.setcookie.php

できます。そのページの「よくある落とし穴」を必ず読んでください。

スーパーグローバル$_COOKIE['cookie_name']も使用して、Cookieを読み書きできます。

18
Francisc

Setcookie()関数を使用してCookieの値を更新できますが、4番目の引数に「/」を追加する必要がありますこれは「path」引数で、同じ名前の別のCookieが作成されないようにします。

すなわちsetcookie('cookie_name', 'cookie_value', $exp_date, '/');

26
Omar Alahmed

そのため、PHPは2つのSet-Cookie:ヘッダーを送信するように指示された場合、最後のヘッダーのみがブラウザーに保持されます。
Netscape Cookieの仕様 http://curl.haxx.se/rfc/cookie_spec.html のコメント:

同じパスと名前のインスタンスは互いに上書きされ、最新のインスタンスが優先されます。同じパスで異なる名前のインスタンスは、追加のマッピングを追加します。

ただし、このようなエッジ条件を回避することをお勧めします。既に送信されたCookieをオーバーライドする必要がないように、アプリケーションを再構築します。

4
mario

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
0
lashgar