[php]cookieの説明 +ページ遷移で消えてしまう際の対応


経緯

setcookieで保存したクッキーがページ遷移した際に消えてしまう現象が起きました。
その対処法をここに記載致します。

結論

このような記述を書いていました。

setcookie(cookie名, cookie保存内容);

上の記述を以下のように記述する。

setcookie(cookie名, cookie保存内容, (time()+1800), "/");

クッキーとは

HTTPにおける情報を管理する通信プロトコルやウェブブラウザに一時的に保存できる情報のことを指します。
HTTPにおけるウェブサーバとウェブブラウザ間で状態を管理する通信プロトコル、またそこで用いられるウェブブラウザに保存された情報のことを指します。
ユーザ識別やセッション管理を実現する目的などに利用されます。
Cookieを残しておくと第三者に不正使用される可能性があるため、個人情報は載せてはいけないです。

setcookieの説明

クッキーを保存できます。



setcookie('cookie_name', 'クッキーです');

上の例のように引数2個だけでも、クッキーへ値を渡せます。

ブラウザでクッキーの確認

ディベロッパーツールを開いて、画像中①のようにApplicationタブを押下し、
Storage配下のCookiesを見ると保存したクッキー情報が入っています。

例で入力した「cookie_name」が入ってることが確認できます。

クッキーの取り出し方

$_COOKIE['クッキー名']で取り出せます。

echo $_COOKIE['cookie_name'];

ページ遷移でcookieが消える理由

有効範囲がpathで指定されてるからです。

先ほどブラウザでクッキーを確認したところにpathが書いてあります。

pathは/products/detailになっています。(※例として使っています。)
よって、productsディレクトリ配下のファイルであればクッキーへアクセスできます。

しかし、productsディレクトリ配下ではない別のディレクトリからクッキーへはアクセスできないようになっています。
これがsetcookieの仕様でマニュアルに記載されています。

↓マニュアルです。
https://www.php.net/manual/ja/function.setcookie.php

対処方法

先ほどの例ではsetcookieを使用する際に、
setcookie('cookie_name', 'クッキーです')
このように第2引数までしか付けず、有効期限やpathを指定していませんでした。

このpathを指定を変えることで別のディレクトリでも使用できるようになります。

`setcookie('cookie_name', 'クッキーです', (time()+1800), '/')`

有効期限を30分、pathを'/'にしました。
'/'はルートディレクトリを表しています。どのページからでもアクセスすることができます。

ブラウザを更新すると、pathが変更されて表示されます。

参考