Help us understand the problem. What is going on with this article?

Cookieの削除の話

はじめに

Cookieをプログラムで使用する時に、「Cookieの削除はいつから有効になるのか」ふと疑問思ったので、
軽く実験してみました。
おそらく、HTTPプロトコルについての基本がわかっている人はそんなの当たり前に知っているという人が多いでしょう笑

webアプリを開発時、Cookieの処理を実装しようとした時にどうするかを考えた時に、この処理の時はあるCookieを削除して、
その後の処理を分岐させたいというアイデアが出たのですが、それって多分できないよねって話になりました。

多分っていうのが気持ち悪かったので、PHPで試しに実験してみました。

環境

環境

PHP7
CakePHP3

実験

  1. ブラウザに Cookie名: name Cookie値: bellcrud を登録する
  2. プログラムで Cookie[name]をログ出力
  3. プログラムで Cookie[name]を削除
  4. プログラムで Cookie[name]をログ出力
CookiesController.php
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ので取得
    }
error.log
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を扱う時は一貫した扱い方をしないと、わけわからなくなるため、気をつけないといけないことがわかりました。

bellcrud
PHPerでフレームワークはCakeとLaravelの経験があります。 趣味でnode.jsとReactを触ってたりします。 週1記事記載を目標にしています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした