Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@bellcrud

Cookieの削除の話

More than 1 year has passed since last update.

はじめに

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を扱う時は一貫した扱い方をしないと、わけわからなくなるため、気をつけないといけないことがわかりました。

0
Help us understand the problem. What is going on with this article?
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
bellcrud
PHPerでフレームワークはCakeとLaravelの経験があります。 趣味でnode.jsとReactを触ってたりします。 週1記事記載を目標にしています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?