4

簡単な説明: IIS サーバー変数 "HTTP_COOKIE" の有効期限が切れようとしていますが、タイムアウト変数によって制御されていないようです。原因を知りたいです。IIS 内で確認できるすべてのタイムアウト/有効期限制御値を変更しようとしましたが、約 20 ~ 30 分で何も変更されていません。

詳細:

IIS サーバー変数 "HTTP_COOKIE" を使用して状態データ、最も重要なのはそのユーザーの現在のセッションのセッション ID (残りの質問では GUID) を格納する C++ バックエンドを持つアプリケーションがあります。どのユーザーも一度​​しかログインできないという要件があり、GUID はこれを強制するために使用されるデータの 1 つです。ユーザーがログオンするたびに、GUID は更新されます。ユーザーがアクションを完了するたびに、タブ sessionStorage にローカルに保存された GUID (つまり、ユーザーがそのタブに最初にログインしたときの値) が、そのユーザー用に最後に作成された GUID に対してチェックされます。それらが一致しない場合、ユーザーはそのタブでアプリケーションからキックオフされます。

問題は、GUID が更新される状況が 2 つあることです。ユーザーがログインしたときと、アプリケーションがメモリ内または HTTP_COOKIE 文字列内で既存の GUID を見つけられなかったときです。ケース 1 は問題ありません。それが私たちが望んでいることです。ケース 2 は厄介です。IIS のセットアップに、20 ~ 30 分後に HTTP_COOKIE がクリアされる原因があるように見えるからです (正確な時間は特定していません)。調べたところ、これを引き起こしている可能性のある多くのタイムアウトが見つかりましたが、それぞれを順番に 1 分に変更し、IIS をリセットして再試行しても、タイムアウトに違いはありませんでした。

  • サイト=>既定の Web サイト=>セッション状態=>Cookie 設定=>タイムアウト
  • サイト=>既定の Web サイト=>ASP=>セッション プロパティ=>タイムアウト
  • サイト=>既定の Web サイト=>Allstate アプリケーション=>ASP=>セッション プロパティ=>タイムアウト

違いを生んだ唯一のものは次のとおりです。

  • アプリケーション プール => 詳細設定 => プロセス モデル => アイドル タイムアウト

しかし、これは、削除したいタイムアウトの原因ではなく、他のタイムアウトの前に起動してすべてをリセットしたためです。システム内では、このタイムアウトは通常無効になっています (MSDN ガイドラインに従って 0 分に設定されています)。

私は考えられるすべてを調べました - サーバー側のコードは有効期限が切れたかどうかにかかわらずまったく同じタスクを実行しているため、これは間違いなく IIS の問題です。唯一の違いは、HTTP_COOKIE 文字列が上記のアイドル時間の後になくなったことです。そのため、既存の GUID が見つからないため、新しい GUID が生成されます。イベント ログには、何かがスペースを使い果たした、または何らかの原因でリセットに失敗したことを意味するエラーはありません。

私が求めているのは、これを制御できる他の何かを誰かが知っているかどうか、およびこれを無効にしたり、より大きな値に変更したりできる場所を知っているかどうかです。これが何であるかを知っていて、バイパスが不可能であることを知っている場合、それも知っておくと便利です. この場合、ユーザー セッションの GUID を保存するためのより良い方法について提案がある場合は、それも歓迎します。

前もって感謝します。

PS システムを完全に書き直す必要がある場合、これを処理するためのより良い方法を探しているわけではありません。整理するリソースが与えられていないので、私が持っている唯一のオプションは、システムをそのまま使用することです.

4

2 に答える 2

0

セッション Cookie の有効期限が近づいていますが、問題はすべてのブラウザーで一貫していますか?

アプリケーションに致命的なエラーが発生するか、サーバーのメモリがいっぱいになり、AppPool がクラッシュしてセッションがリセットされるという問題に直面しました。その間、Perfmon を使用してサーバー ログを監視してください。致命的なエラー、アプリケーション エラー、IIS エラー、またはシステム エラーが発生している可能性があります。

私はこのように長い間苦労してきましたが、最終的にカルトプリットは致命的なエラーであり、AppPool がクラッシュすることがあり、その AppPool を使用して IIS でホストされているすべてのアプリケーションもリセットされ、それらのアプリケーションのセッションが破壊されました。

于 2016-01-13T08:18:51.237 に答える