2

ユーザーがオンラインである限り、ASP.NET セッションを実行し続けるために、時々更新される非表示の iframe があります。

ただし、ユーザーがセッション タイムアウトを経験しているという報告を受けているため、セッション タイマーをリセットするために何が必要か疑問に思っています。

非表示の iframe のコンテンツ ページ (単純な html ページ) は、セッション タイムアウトよりも大幅に短い一定の間隔で更新されます。

私の質問は、サーバーが HTTP/1.x 304 Not Modified で応答した場合でも、(セッション タイマーをリセットするのに) ページを更新するだけで十分ですか?

Webサーバーにセッションタイマーをリセットするように指示するのは、単にGETリクエスト自体ですか?

または、実際にページを取得して HTTP/1.x 200 OK 応答を受け取る必要がありますか?

4

1 に答える 1

6

セッションを維持するために必要なことは、現在のセッションからページにリクエストを送信することだけです。これは、iframe または ajax を介して行うことができます。

IFrame で単にページを更新すると、応答がキャッシュされたものになる可能性があるため、304 になります。毎回新しい要求を送信する必要があります。

var url = "http://domain.com/defibrillator.aspx?" + (new Date()).getTime();

例えば

http://domain.com/defibrillator.aspx?1556467987987
http://domain.com/defibrillator.aspx?5448796497878
http://domain.com/defibrillator.aspx?4123165487987
....

編集1

または、 Refresh HTTP ヘッダー属性を使用できます。


編集1.1

上記の codeproject 記事を使用している場合は、iframe の代わりに AJAX を使用してモデル化してみてください。これにより、余分な iframe マークアップを数バイト節約できます。


EDIT 2 -変更されていない HTTP 304について

クライアントが条件付き GET リクエストを実行し、アクセスが許可されているが、ドキュメントが変更されていない場合、サーバーはこのステータス コードで応答する必要があります。304 応答はメッセージ本文を含んではならないため、常にヘッダー フィールドの後の最初の空行で終了します。

これは、要求が ASP.NET パイプラインに到達せず、IIS 自体によって直接処理されたことを意味します。ASP.NET 環境は、要求が行われたことを知りません。そのため、セッションの更新は実行されません。

于 2009-08-13T09:33:27.177 に答える