1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【PHP】$_SESSIONをマルチインスタンス環境で使うときの注意点

1
Last updated at Posted at 2025-12-02

$_SESSION とは

$_SESSION とは、ユーザーのセッション情報を保存・管理するためのPHPのスーパーグローバル変数の1つです。

どこに保存されるのか?

PHPには、セッションデータの保存と取得を行うためのハンドラを設定する session.save_handler という設定項目があります。

何も設定しない場合のデフォルト値は file のため、セッション情報はローカルファイルとして保存されます。

クラウド環境(マルチインスタンス)での問題点

session.save_handler をデフォルトの file 設定のまま使用する場合、開発環境のように単一のコンテナやサーバーで動かす分には問題ありません。

しかし、AWSやGCPなどのクラウド環境では、負荷分散のために複数のインスタンス(サーバー)が起動していることが一般的です。よって、ファイル形式のセッション管理だと各インスタンスごとにセッション情報を持つため、セッション情報が共有されない問題が発生します。

例えば、インスタンスが2つ立っていてインスタンスAでログインをしたが、別ページへ遷移したときにインスタンスBへルーティングされて、Bにはユーザーのログイン情報が存在しないためにログインしていないとみなされる可能性があります。

解決策:共有ストレージでセッションを管理する

こういった事象を回避するためには、どのインスタンスからもアクセスできる共有ストレージにセッション情報を保存するように設定を変更する必要があります。

具体的には session.save_handler の設定をRedisMemcachedDB等に変更すればどのインスタンスからも同じセッション情報を扱えるようになります。

// Redisを使う場合の例
ini_set('session.save_handler', 'redis');
// Redisサーバーの接続先も設定
ini_set('session.save_path', 'tcp://127.0.0.1:6379');

まとめ

  • $_SESSION のデフォルトの保存先は、サーバーのローカルファイル(session.save_handler = file

  • クラウドなどのマルチインスタンス環境 でデフォルト設定のまま利用すると、セッションデータが共有されず、ログイン状態の解除などの不整合が発生する

  • 解決策として、session.save_handlerRedis などの共有ストレージに設定する

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?