PHPでCookie(クッキー)を使う方法(保存/取得/削除)

PHP

今回はPHPのCookie(クッキー)について解説しています。

最初にクッキーについて簡単に解説して、PHPでの保存・取得・削除について書きました。
その後に実際にクッキーを使って、カウント値を操作する画面のサンプルコードを載せています。

PHPのクッキーについての公式のドキュメントはこちらにになります。

PHPのクッキーとは?

PHPのクッキーは、Webサーバ(PHP)とクライアントのブラウザで状態維持・管理するための仕組みになります。
HTTPプロトコルのクッキーを完全にサポートしているとのこと。

HTTPプロトコルで決まりがあるよう(参考:wiki)なので、PHP以外のプログラミング言語でもCookieを使う事ができます。

クッキーはデベロッパーコンソールで確認できる

クッキーはブラウザで変更したり、削除できる情報になります。
そのためchromeブラウザの場合には、「右クリック > 検証」などからデベロッパーコンソールを開いて、アプリケーションタブから確認することができます。

Chromeデベロッパーツールからクッキー確認

このようにドメインごとに保持されるので、選ぶと、キー(名前)と値が確認できます。

PHPでクッキーを使う方法

PHPでクッキーを使う方法として、保存・取得・削除のサンプルを解説しています。

保存する

クッキーの値を保存するにはsetcookie関数を使うと良いです。
例えば、下記のように値をCookieに保存することができます。

<?php
setcookie("COUNTER", 100);

setcookie関数を呼び出して、第1引数の文字列をキーにして、第2引数の値を設定します。
今回の場合だと「COUNTER」をキーにして、第2引数の「100」をクッキーに設定してくれます。

実行すると、アクセスしたユーザーのブラウザのクッキーに「COUNTER」という値で「100」が保存されます。
今回は指定していませんが、第3引数に有効期限やオプションを指定することができます。

保存できたか確認する

実際にブラウザを確認してみると、下記のように保存されていることが確認できました。(setCookie.phpファイルを作成しました)
chromeのデベロッパーツールで確認しました。

クッキーの保存確認

このようにブラウザに保持されます。そのため手動でブラウザから削除することができます。

取得する

クッキーから値を取得するときは、スーパーグローバル変数の「$_COOKIE」にアクセスすることで取得することができます。

<?php
echo $_COOKIE['COUNTER'];

$_COOKIE」を呼び出して、連想配列のようにキーを指定すると取得できます。
今回はキーとして「COUNTER」を使ったので、そのキーで値を取得しました。

取得できたか確認する

ブラウザから実際に作成したファイルを「getCookie.php」というファイル名で配置して、アクセスしてみました。

クッキーの取得情報を表示確認

ブラウザに保持されている値にアクセスできて、表示されました!
ちなみにクッキーの値をブラウザで直接変えると、表示される値も変わります。(改ざん可能)

削除する

クッキーを削除するときにもsetcookie関数を使います。
有効期限に、現在時刻(Unixタイムスタンプ)からマイナスになるような数値を設定すると良いようです。

<?php
setcookie("COUNTER", 0, time() - 3600);

setcookie関数を呼び出して、第3引数の有効期限にマイナス値を設定しました。
time関数で現在のUnixタイムスタンプを返して、そこから-1時間を設定しています。

これで、クッキーが削除されます。

削除できたか確認する

実際に削除できたかブラウザからアクセスして試してみました。(deleteCookie.phpファイルを作成)

クッキーの削除確認

ブラウザからアクセスすると、chromeのデベロッパーツールで確認できた「COUNTER」が消えています。
このようにクッキーの値を削除することができました。

クッキーを使ったサンプルコード

実際にカウント値を表示する簡単な画面を使ってみます。
クッキーにカウント値を保持したまま、カウントアップしてみます。

counter.phpというファイルを下記の内容で作成して保存しました。

<?php
    $counter = isset($_COOKIE['COUNTER']) ? $_COOKIE['COUNTER'] : 0;
    $isPushCountUp = isset($_POST['count']) ? $_POST['count'] : null;

    if ($isPushCountUp == "ok") {
        setcookie("COUNTER", ++$counter);
    }
?>
<html lang="ja">
    <head>
        <meta charset="UTF-8" />
        <title>クッキーカウンターAPP</title>
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
    </head>
    <body>
        <div class="container">
            <p class="fs-1 text-center"><?=$counter?></p>
            <form action="counter.php" method="post">
                <input type="hidden" name="count" value="ok" />
                <div class="d-flex justify-content-center">
                    <button class="btn btn-lg btn-primary">カウントアップ</button>
                </div>
            </form>
        </div>
    </body>
</html>

$counter変数にカウント値を取得、カウント値を加算するようにしています。
$isPushCountUp変数でカウントアップボタンが押されたか判定した値を入れています。

formのインプットタグにhiddenタイプで、countという名前でボタンを押した時に送信する値を保持しています。
ボタンが押されたら、この値が送信されます。

そして、if文の中を通って現在のカウント値に+1した値をクッキにー設定しています。

動作確認する

実際にファイルを保存して、ブラウザで動作を確認すると、このように動いていることが確認できます。

ブラウザでクッキーの動作確認する

クッキーのCOUNTERの値がカウントアップしていることが確認できました。
このようにクッキーに設定した値が、クライアントのブラウザに保持されます。

削除・変更が可能なので、クッキーを使う際には注意しましょう。

クッキーとセッションの違いは?

クッキーはブラウザに値を保持しますが、セッションはサーバー側に値を保持します。
そのため、ユーザーに変更や消されたくない値はセッションで保持する方がいいです。

PHPのCookie(クッキー)まとめ

今回はPHPでクッキーの使い方(操作する方法)について確認していきました。

・クッキーの保存にはsetcookie関数を使う。
・クッキーの取得には$_COOKIEを使う。
・クッキーの削除にもsetcookie関数を使う。
・クッキーはブラウザで変更・削除ができる。変えられたくない場合にはセッションを使う。

コメント

タイトルとURLをコピーしました