【基礎知識】PHPでのクッキー(PHP8技術者認定初級試験)

こんにちは、穂苅と申します。

このコラムでは、私が PHP8 技術者認定初級試験のための公式問題集(PHP8 技術者認定初級試験公式問題集)で学習した内容やポイントを取り上げて解説をしていくものです。
今回は、P231〜239 のChapter 23「ユーザーの記憶 クッキーとセッション」を学習してみました。

目次

クッキーとは?

クッキーは、Web サイトやWeb アプリケーションを作るときには必ず必要になる技術で、Web サイトからコンピューターのブラウザに保存される小さなデータのことです。ユーザーのブラウザに情報を保存することで、次に同じユーザーの訪問があった際に、ユーザーのブラウザに保存した情報を取り出して再利用する事ができます。

これを使うと、例えば再訪時に挨拶をしたり情報を出し分けたり、ログイン中かどうかを判別したり、ショッピングカートに商品を入れたままかどうかを把握したり、などを制御できるため非常に便利なものです。
PHP の場合、setcookie 関数(※1)を使ってクッキーに名前、値、有効期限などを設定する事ができます。

setcookie(
string $name,
string $value = “”,
int $expires_or_options = 0,
string $path = “”,
string $domain = “”,
bool $secure = false,
bool $httponly = false
): bool

(※1)https://www.php.net/manual/ja/function.setcookie.php

文法を説明するとこのようになります。

・expires: クッキーの有効期限で、短いほど安全
・path: クッキーを共有できるURL パスで、細ければ細かいほど安全
・domain: クッキーを共有できるサブドメインで、細ければ細かいほど安全
・secure: HTTPS 接続の場合にのみクッキーを送信するかどうかを制御するもので、true のほうが安全
・httponly: HTTP 経由のみでクッキーを共有するかどうかを制御するもので、true のほうが安全だがtrue にするとほとんどのブラウザでJavaScript などのスクリプト言語からはアクセスできなくなる
・samesite: 異なるWeb サイトでもクッキーを共有するかどうかを制御するもので、安全な順にStrict > Lax > Non

これだけの制御ができるクッキーを、構築するサイトやアプリケーションに応じて、安全性と機能性を踏まえた実装を行っていくということになります。
クッキーの注意点としては、まずセキュリティです。実はブラウザの開発者ツールなどで簡単に見ることができます。そのため、見られてはいけない情報(パスワードなど)は保存してはいけません。
また、クッキーには有効期限が存在しています。ブラウザを閉じると有効期限が切れてしまうため、クッキー情報があることを前提にしたプログラムにしないことが必要です。例を出してみます。

<?php
setcookie(“username”, “Tomoya”, time() + 3600); // 1 時間だけ保存
echo “クッキーを保存しました!”;
?>

これで、username = Tomoya という情報がユーザーのブラウザに保存されました。
そして、このように読み出してみます。

<?php
if (isset($_COOKIE[“username”])) {
echo “こんにちは、” . $_COOKIE[“username”] . “さん!”;
} else {
echo “はじめまして!”;
}
?>

ブラウザに保存されていたクッキーを読み出して、「こんにちは、Tomoya さん!」と表示されます。

クッキーとセッション

先述の通りクッキーにパスワードを保存するようにしてしまうのは非常に危険です。
そこで、セッションという仕組みも存在します。クッキーがユーザーのブラウザ側に情報を保持していたように、セッションはサーバ側に情報を保持できます。クッキーでは扱えない情報を管理する場合はセッションを利用することが必要です。
セッションを使う場合は、session_start を使います。

<?php
session_start(); // 必ず最初に書く!
$_SESSION[“username”] = “Tomoya”;
echo “セッションに保存しました!”;
?>

これで、サーバがusername を記憶してくれます。
続いて、セッションの情報を読み取って表示させます。

<?php
session_start();
if (isset($_SESSION[“username”])) {
echo “ようこそ、” . $_SESSION[“username”] . “さん!”;
} else {
echo “ログインしていません。”;
}
?>

サーバに保存された情報を読み取って、ログイン中のユーザー名などを表示できます。
セッションを消す場合はこのようにします。

<?php
session_start();
session_unset(); // セッション変数を全削除
session_destroy(); // セッションを完全に破棄
echo “ログアウトしました!”;
?>

PHP8技術者認定初級試験で、正しいPHPの理解を

今回はPHP でもとても重要なクッキーとセッションについて勉強してきました。
イメージはつきましたでしょうか。
今回お読みいただいた方で、PHP の初学者の方はインプットすることがとても多いと思います。PHP の学習やエンジニアになるためのマイルストーンとして、PHP 試験はおすすめです。PHP8 技術者認定初級試験はPHP を扱うあらゆる方にとって有益な試験になるはずですので、ご興味がある方はぜひチャレンジしてみてください。

試験ページ: PHP8 初級試験
公式問題集:PHP8 技術者認定初級試験公式問題集

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次