1

私のスクリプトは新しいPHPセッションを作成し、すぐにユーザーを別のページにリダイレクトします。

これは、サーバーが1時間ほどアイドル状態になった後の初めての場合を除いて、毎回完全に機能します。2回目以降は、完全に機能します。サーバーがアイドル状態になると、常に失敗し、最初の試行後は常に機能します。

編集 サーバーがアイドル状態の場合、セッションは機能しません。その後はすべて正常に動作します。

理論的には、このような最初の試行でセッションが失敗する原因は何でしょうか。

コードのどの部分を投稿するかわからないという理由だけで、ここにコードを投稿したくありません。これは、PHP5.3を使用するIIS7にあります。CGIとFastCGIの両方を使用して同じ結果。

session_start();を編集します。両方のスクリプトで呼び出されます。最初のページはすぐに次のページにリダイレクトされるため、ユーザーには表示されません。スクリプト間の間隔は1秒未満です。

4

4 に答える 4

2

セッションはディスクに保存されます。アクティビティがないため、サーバーのディスクがスピンダウンしている可能性があります。その後、ディスクのスピンアップが完了する前にスクリプトがタイムアウトします。可能?

于 2012-11-06T14:27:04.773 に答える
1

PHPセッションにはタイムアウトがあります(あなたの質問を正しく理解している場合)。つまり、タイムアウト後に「リセット」されます。

php.ini ファイルで確認できsession.gc_maxlifetimeます:)

よくわからない場合は、コード自体のエラーである可能性があります。

于 2012-11-06T14:24:13.397 に答える
0

私のスクリプトは新しい PHP セッションを作成し、すぐにユーザーを別のページにリダイレクトします。

私はあなたの言葉を次のように解釈session_start()header('Location: 'page2.php')ましsession_start()た。

使用するすべてのページで session_start() が必要です$_SESSION。つまり、session_start()すべての PHP ページの先頭に配置するか、すべてのページで実行する予定のインクルード ファイル内に配置します。

于 2012-11-06T14:41:13.150 に答える
0

私自身の質問に答えます。結局のところ、含まれているモジュールの1つにある古い「機能」が原因でした。この「機能」は、セッションが 1 時間以上開いたままになっている場合に session_destroy() を呼び出してセッションを終了するように設計されています。

これにより、ユーザーがログインしようとすると、PHP が古いセッションに気づき、session_destroy() を呼び出すという問題が発生しました。この後、すべて問題ないように見えましたが、新しいセッション変数をセッションに書き込むことができませんでした。PHP ログに問題の兆候はありませんでした。

session_destroy を session_unset に変更すると、問題が解決しました。

于 2012-11-07T10:30:51.730 に答える