1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

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

経緯

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

結論

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

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

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

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

クッキーとは

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

setcookieの説明

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



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

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

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

スクリーンショット 2020-11-09 20.17.34.png

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

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

クッキーの取り出し方

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

echo $_COOKIE['cookie_name'];

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

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

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

スクリーンショット 2020-11-09 20.32.08.png

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が変更されて表示されます。
スクリーンショット 2020-11-09 20.48.23.png

参考

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
1
Help us understand the problem. What are the problem?