Skip to content
Menu
プログラミング教室 M&Co.
  • はじめに
  • 当スクールの料金
プログラミング教室 M&Co.
2025年1月10日2025年1月16日

PHPのセッション

TOC(目次)

  1. セッションの概要
  2. セッションデータ保存の処理の流れ
  3. セッションデータ取得の処理の流れ
  4. セッションの有効期限
  5. セッションデータの保存場所
  6. セッションデータをRedisに保存する
  7. まとめ

PHPにはセッションという仕組みがあり、ユーザーのデータを一時的に保存しておくことができます。

ユーザーがChromeやEdgeなどのブラウザからPHPアプリケーションにアクセスすると、セッションIDというユーザーに一意なIDが割り振られます。割り振られたセッションIDは、セッションクッキーに保存されます。このセッションIDとデータを紐付けることで、ユーザーのデータを一時的に保存することができるのです。

セッションに保存したデータは、デフォルトではサーバー内にファイルとして保存されます。


セッションデータ保存の処理の流れ

  1. セッションの開始: session_startを呼び出します。セッションを開始すると、以下の処理が自動的に行われます。
  2. セッションクッキーからセッションIDを取得。
  3. セッションIDの作成: セッションIDの取得ができなかった場合、セッションIDの作成を行います(初回のアクセス時はセッションIDを作成します)。
  4. データの保存: スーパーグローバル変数$_SESSIONにデータを保存します。
  5. セッションの終了: session_write_closeを呼び出してセッションを終了させます。
<?php
session_start();
$_SESSION["your_name"] = "ららべる子";
session_write_close();
?>

セッションデータ取得の処理の流れ

  1. セッションの開始: session_startを呼び出します。セッションを開始すると、以下の処理が自動的に行われます。
  2. セッションクッキーからセッションIDを取得。
  3. セッションIDの作成: セッションIDの取得ができなかった場合、セッションIDの作成を行います(初回のアクセス時はセッションIDを作成します)。
  4. データの取得: スーパーグローバル変数$_SESSIONからデータを取得します。
  5. セッションの終了: 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を使用することが一般的です。

  1. PhpRedisのインストール: まずはPhpRedisをインストールします。インストール手順は別の記事で説明します。
  2. 設定の変更:
    • session.save_handler = redis
    • session.save_path = "tcp://localhost:6379"

次にRedisデーモンを起動させます。Dockerを使用する方法が推奨されます。

bashコードをコピーする$ docker run --name some-redis -d redis

これでセッションデータはRedisに保存されるようになります。


まとめ

PHPのセッションはシンプルなデータを一時的に保存するのに適しています。シンプルなショッピングカートやログイン状態を保存するのに便利です。サーバー内にシンプルなデータを一時的に保存しておきたい場合は、セッションを使用しましょう。


©2025 プログラミング教室 M&Co.