0

小さなCMSを書いています。ユーザー認証は、名前付きセッションで、php で設定されたセッション変数によって行われます。logout が呼び出されると、ajax ルーチンが別の php スクリプトをロードして作業を行います。この別のスクリプトは、同じセッション パラメータを使用します。セッション変数はランダム データで個別に上書きされ、セッションは破棄されます。これは機能します。ログアウト後にブラウザの Cookie リストを調べると、セッション Cookie が削除されていることがわかります。これまでのところ、すべて問題ありません。

ユーザーがログオン中に同じサイトの別のページに移動したり、新しいブラウザー タブで 2 番目のページを開いたりすると、問題が発生します。いずれかが完了すると、ログアウト ルーチンはセッションを破棄または設定解除できません。さらに悪いことに、ログアウト時にパスワード セッション変数がランダム化されていたとしても、ページをリロードすると元の値に戻り、事実上ユーザーは再びログオンします。

ブラウザーのデータを調べると、 session_destroy() が発行されたときにセッション Cookie を削除できなかったことを示しており、プログラムで実行できることは何もありません。

2 番目のサイト ページ (同じセッション パラメータを使用する) を開くと、セッションがロックされているように見えるので、どちらのページからも破棄できない理由を理解しようとしています。PHP のマニュアルでは、そのような動作はどこにも提案されていません。

ブラウザーのキャッシュが原因の可能性が示唆されていますが、可能性は低いようです。

しばらくの間、これと格闘してきました。何か案は?

テストは Firefox のバージョン 6 から最新のもので行われました。

4

2 に答える 2

0

MarcB には答えがあります。セッションを破棄する前に session_write_close() を発行する必要があります。

ajax ログアウト ルーチンでこれを使用すると、任意のページからログアウトすると、開いているすべてのページでのユーザーの編集権限が強制終了されます。

ありがとう。

于 2013-08-21T08:50:07.810 に答える