はじめに
Cookieをプログラムで使用する時に、「Cookieの削除はいつから有効になるのか」ふと疑問思ったので、
軽く実験してみました。
おそらく、HTTPプロトコルについての基本がわかっている人はそんなの当たり前に知っているという人が多いでしょう笑
webアプリを開発時、Cookieの処理を実装しようとした時にどうするかを考えた時に、この処理の時はあるCookieを削除して、
その後の処理を分岐させたいというアイデアが出たのですが、それって多分できないよねって話になりました。
多分っていうのが気持ち悪かったので、PHPで試しに実験してみました。
環境
環境
PHP7
CakePHP3
実験
- ブラウザに
Cookie名: name Cookie値: bellcrud
を登録する - プログラムで
Cookie[name]
をログ出力 - プログラムで
Cookie[name]
を削除 - プログラムで
Cookie[name]
をログ出力
public function index()
{
$this->log('----クッキー取得');
$this->log($this->Cookie->read('name')); // CakePHPの用意しているライブラリで取得
$this->log($_COOKIE); // 素のPHPので取得
$this->log('----クッキー削除');
$this->Cookie->delete('name'); // CakePHPの用意しているライブラリで削除
$this->log($this->Cookie->read('name'));// CakePHPの用意しているライブラリで取得
$this->log($_COOKIE); // 素のPHPので取得
}
2020-05-23 10:26:06 Warning: DebugKit not enabled. You need to either install pdo_sqlite, or define the "debug_kit" connection name.
2020-05-23 10:26:06 Error: ----クッキー取得
2020-05-23 10:26:06 Error: bellcrud // 取得できたことを確認
2020-05-23 10:26:06 Error: Array
(
[Phpstorm-8ff1daf1] => ************************************
[remember_web_*********] => ************************************
[csrfToken] => ************************************
[name] => bellcrud
)
2020-05-23 10:26:06 Error: ----クッキー削除
2020-05-23 10:26:06 Error: // 取得できていない!!!
2020-05-23 10:26:06 Error: Array
(
[Phpstorm-8ff1daf1] => ************************************
[remember_web_*********] => ************************************
[csrfToken] => ************************************
[name] => bellcrud // 削除されていない!!!
)
・ CakePHPの用意しているCookieComponent
では削除された扱い
・ PHPの用意している$_COOKIEでは削除されていない
結論
「正確にいうと削除されません。」
CakePHPの用意しているライブラリでは削除扱いになっていますが、実際のところは素のPHPでのCOOKIE取得でわかる通り削除されていません
COOKIEはを削除するというのは、有効期限切れにするという処理をクライアント側で完了して削除されたということ。
サーバー上で削除するというのが、そもそもの考えが意味わからないということですね。
ただ、フレームワーク側で用意されたライブラリを使うと、削除された扱いとなり取得できなくなるようにすることができる。
所感
cookieを扱う時は一貫した扱い方をしないと、わけわからなくなるため、気をつけないといけないことがわかりました。