ランダムにデータを失っている間に、$_SESSION
問題が発生しました。$_SESSION
さまざまなページのフォームがあり、ユーザーはすべてのページを通過するための特定の時間があります。
そこで、最初のページでセッション変数を設定し、他のページでそれを確認します。
start.php
<?php
session_start();
//Set Variable for Starting application
if (!isset($_SESSION['STARTED'])){
$_SESSION['STARTED'] = time();
}
app_init.php
<?php
session_start();
if ((!isset($_SESSION['STARTED'])) || (time() - $_SESSION['STARTED'] > MAX_TIMELIMIT)) {
echo '<!-- st: '.$_SESSION['STARTED'].'-->';
// Started Variable is not set or timelimit is over.
session_destroy(); // destroy session data in storage
session_unset(); // unset $_SESSION variable for the runtime
showTimeout('0'); // show timeout
}
その後のページの開始:
<?php
// get basic settings for applications
require_once (MODEL_PATH.'/app_init.php');
システム全体は、ローカルインストール、Developmentserver、およびTestserverで非常に正常に機能します。Productionserverでは、さまざまな時間にタイムアウトが発生します。30秒から10分とは異なります。MAX_TIMELIMIT
20分です。$_SESSION['STARTED']
その場合は常に空です。他の環境では、20分後にタイムアウトが表示されても、正しく設定されています。
追加情報:
- 次のページに到達しようとしても、実際のページをリロードするだけでも、常にタイムアウトになります。
- 私はすでに任意の環境をチェック
php.ini
しました->session.save_path
正しく設定され、session.cookie_lifetime
0でsession.gc_maxlifetime
1440です - ディスクスペースは問題ありません(> 22 GBの空き容量)
- すべてのファイルは同じサーバー上にあり、同じURLを持っています(フォームのステップを指定する最後の部分を除く。次のようになります:
host / some / path / calc-> host / some / path / form-> host / some / path / summary-> host / some / path / send - セッションは計算ページで設定され、タイムアウトはすべてのページ(計算、フォーム、要約)で発生する可能性があります
- 本番サーバーからphp.iniを取得し、ローカルワークスペースに取り込みました。いくつかのパス(extensions-path、session.save_path、tmp-path)を変更した後、ローカルインストールで非常にうまく機能しました。
- プロトコルはすべて同じページです
- セッションを再作成する(および、を介し
$tmp
てsession_destroy()
)session_create()
は役に立ちませんでした - 単一のフロントエンド、ロードバランサーなし(単に1つのapache)
- セッションファイルはどういうわけか削除されます
いくつかの出力を追加して再テストした後、次のようになります。
- ページをロードします(最初のステップ)
- フォームから任意のステップ(計算/フォーム/要約)に進みます
ページが読み込まれるとき
$_SESSION
はarray ( 'STARTED' => 1338298801, 'S_SID_' => '41554681145546', 'S_LC_' => 'de', 'version_testing' => 1, )
そのページを30秒ごとにリロードします
少なくとも3分後(30秒になることもあります)、タイムアウトが発生し、次のようになり
$_SESSION
ます。array ( )
最初のページでこれを試してみると
$_SESSION
、sessiondataが空で、自動的に新しい値が設定されるため、で新しい値が取得されます。覚えておくべきこと:テスト/開発環境では、セッションデータはまだそこにあり、タイムアウトが20分後に発生します。
session.save_pathの変更は最初は機能しているように見えました(セッションは少なくとも24分続きます)。しかし、1時間後も、同じ問題が発生します。4分以上続くセッションはありません。
問題が見つかりました(ただし、まだ解決策はありません)
今日、Production-Serverにアクセスでき、Session-Dataのあるフォルダーが3〜5分後にクリーンアップされることがわかりました。タイムスタンプが3分より古いファイルはありません。前述のように、PHPは正しく設定されており(GCライフタイム)、Windowsジョブなど、これらのファイルを削除しているものは見つかりませんでした。PHP.iniが正しく設定されているので、データベースを介してセッションを処理しようとします。
手伝ってくれてありがとう