Take1016様の回答のままなのですが、ロードバランサーでどのサーバーにアクセスするかは保証されていないので、セッションをファイルで管理すると思わぬ不具合にあってしまいます。
リクエストと不具合の図式は下記のようになると思います。
順 | ページ | サーバー | セッション |
---|
1 | あるページ | サーバーA | セッションファイル作成 |
2 | エラーページ | サーバーB | セッションファイルなし(← エラーコードなし) |
仮に、下記のようにセッションを作成したサーバーと同じサーバーにエラーページでもアクセスした場合は問題なくセッションにアクセスできるはずです。
順 | ページ | サーバー | セッション |
---|
1 | あるページ | サーバーA | セッションファイル作成 |
2 | エラーページ | サーバーA | エラーコードあり! |
ミラーリングで異なるサーバー間でセッションファイルをミラーリングしてもタイミングが保証されていないので、Take1016様の回答にあるようにセッション管理をDBに移行したほうが全体的にシンプルになるかと思います。
これは、サーバーやエラーページとは関係ない問題で、本サーバー構成でのPHPでのセッション管理方法の問題です。そのため、shoko1様もロードバランサーの設定変更について言及しています。
下記のような2つのPHPを埋め込んだ異なるページでテストしてみてください。
最初に下記PHPコードのページにアクセスしてから、
php
1<?php
2session_start();
3$_SESSION['test'] = 'これはセッションテストです。';
4?>
次に、下記のPHPコードのページに何回かアクセスしてみます。コードと、結果を見ていただければ何が起きているのかわかると思います。何回かアクセスすると「セッションが空です。」が表示されるかと思います。
php
1<?php
2session_start();
3if (empty($_SESSION)) {
4 echo 'セッションが空です。';
5}
6else if (! isset($_SESSION['test'])) {
7 echo 'セッションキー「test」が存在しません。';
8}
9else {
10 echo $_SESSION['test'];
11}
12?>