50分間維持される設定にしているが、10分も持たない。
php.iniの設定を確認すると1440秒。この設定すらも実現されていない。
原因
サーバ上に私が作成したシステムの他にも多くのシステムが稼働している。
下記のページの説明がそのまま当てはまる状態のよう。
https://blitzgate.co.jp/blog/1946/
自分が作成したシステム内で session.gc_maxlifetime を長めに設定しても無意味。
対応
上のページに記載されているように session_save_path コマンドで
自分のシステムだけのセッション情報の保存場所を指定した。
これで解決した。セッションは消えなくなった。
未解決の問題
だが、上に記載した方法では解決できない事例があった。
session_save_path コマンドで指定したディレクトリを見ることができないのである。
ロードバランサーを使用しているため、セッション情報に限らず、
ファイル出力したデータはすべて別のサーバ上に保存される。
そのため、保存したファイル内の情報を読み取ることができないという困った事態が発生。
このような場合はサーバを指定するためにURLにポート番号を含めれば良いらしいのだが、
ポート番号を含めていないURLを関係者に事前に告知しており、
今更、URLを変更することができないのである。
最後の一手
セッション情報をデータベースに保存することにした。
と言っても、私一人の力でできる分けもないので下のページに助けてもらった。
というかそのまま利用させてもらった。
https://www.keicode.com/cgi/save-session-in-mysql.php
ソースコードをコピペしてファイルを作り、
Mysqlのデータベースにテーブルを作成したら、
何と、あっさり実現できてしまい、システムも正常に動作した。
このページには「ローカル時間で保存するのは避けたほうが無難です。」と記載されている。
しかし、標準時の秒数表記では、いつ発生したセッションかを私は全く判別できない。
これでは困るのでMysqlのテーブルにTimestampタイプの項目を追加して、
データの登録日時と更新日時が日本時間で自動的に登録されるようにした。
これでセッションの保存状況を確認しやすくなった。
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image