TOC(目次)
- セッションの概要
- セッションデータ保存の処理の流れ
- セッションデータ取得の処理の流れ
- セッションの有効期限
- セッションデータの保存場所
- セッションデータをRedisに保存する
- まとめ
PHPにはセッションという仕組みがあり、ユーザーのデータを一時的に保存しておくことができます。
ユーザーがChromeやEdgeなどのブラウザからPHPアプリケーションにアクセスすると、セッションIDというユーザーに一意なIDが割り振られます。割り振られたセッションIDは、セッションクッキーに保存されます。このセッションIDとデータを紐付けることで、ユーザーのデータを一時的に保存することができるのです。
セッションに保存したデータは、デフォルトではサーバー内にファイルとして保存されます。
セッションデータ保存の処理の流れ
-
セッションの開始:
session_start
を呼び出します。セッションを開始すると、以下の処理が自動的に行われます。 - セッションクッキーからセッションIDを取得。
- セッションIDの作成: セッションIDの取得ができなかった場合、セッションIDの作成を行います(初回のアクセス時はセッションIDを作成します)。
-
データの保存: スーパーグローバル変数
$_SESSION
にデータを保存します。 -
セッションの終了:
session_write_close
を呼び出してセッションを終了させます。
<?php
session_start();
$_SESSION["your_name"] = "ららべる子";
session_write_close();
?>
セッションデータ取得の処理の流れ
-
セッションの開始:
session_start
を呼び出します。セッションを開始すると、以下の処理が自動的に行われます。 - セッションクッキーからセッションIDを取得。
- セッションIDの作成: セッションIDの取得ができなかった場合、セッションIDの作成を行います(初回のアクセス時はセッションIDを作成します)。
-
データの取得: スーパーグローバル変数
$_SESSION
からデータを取得します。 -
セッションの終了:
session_write_close
を呼び出してセッションを終了させます。
<?php
session_start();
if (isset($_SESSION["your_name"])) {
echo $_SESSION["your_name"];
}
session_write_close();
?>
セッションの有効期限
セッションには有効期限を設定することができます。session_start
を呼び出す際にcookie_lifetime
を指定すると、有効期限を設定できます。
以下は有効期限を360秒に設定する例です。
<?php
session_start([
'cookie_lifetime' => 360,
]);
?>
何も指定しない場合は、php.ini
のsession.cookie_lifetime
に設定されている値が有効期限となります。デフォルトでは0が設定されており、ブラウザを閉じるまで有効という設定です。一度ログインしてもそのうち勝手にログアウトされる現象は、この有効期限が原因です。
セッションデータの保存場所
セッションデータはデフォルトでサーバー内にファイルとして保存されます。その保存場所はsession.save_path
に設定されています。この設定はphp.ini
にあります。
cookie_lifetime
と同様に、セッション開始時に変更することも可能です。
<?php
session_start([
'save_path' => '/home/admin/sessions/',
]);
?>
デフォルトではファイルに保存されますが、DBやRedisに保存する方法も一般的です。実務ではRedisに保存することが多いです。
セッションデータをRedisに保存する
PHPからRedisにセッションデータを保存するには、PhpRedisを使用することが一般的です。
- PhpRedisのインストール: まずはPhpRedisをインストールします。インストール手順は別の記事で説明します。
-
設定の変更:
session.save_handler = redis
session.save_path = "tcp://localhost:6379"
次にRedisデーモンを起動させます。Dockerを使用する方法が推奨されます。
bashコードをコピーする$ docker run --name some-redis -d redis
これでセッションデータはRedisに保存されるようになります。
まとめ
PHPのセッションはシンプルなデータを一時的に保存するのに適しています。シンプルなショッピングカートやログイン状態を保存するのに便利です。サーバー内にシンプルなデータを一時的に保存しておきたい場合は、セッションを使用しましょう。