1

IRequiresSessionState を使用して、次のようなハンドラーがあります。

public class MyHandler : IHttpHandler, IRequiresSessionState
{
  // code
}

コードでは、セッション値を読み取って設定できます。また、発信者がログインしていることも確認します。すべて正常に動作します。

Web サイトはフォーム認証を使用しているため、web.config には次のように記述されています。

<authentication mode="Forms">
   <forms loginUrl="Login.aspx" timeout="10" slidingExpiration="true"></forms>
</authentication>

問題は、クライアントからサーバー コードへの AJAX 呼び出しがMyHandlerセッションの寿命を延ばさないことです!

そのため、ユーザーがサーバーとのデータの送受信で忙しくても、ページ全体が最後に読み込まれてから 10 分後にタイムアウトします。

ハンドラーでは、各呼び出しのセッションである値を具体的に変更しようとしましたが、それでさえタイムアウトを延長しませんでした。

助言がありますか?

4

1 に答える 1

0

ついにこれに対する解決策を得ました...ある種。

私はハンドラーに仕事をさせることをやめ、代わりに通常のASPXページを呼び出しました。そのページで、HTMLコードを削除し、Response.Write(...)を使用して必要なJSONを送り返しました。しかし、それでも私のセッションは延長されていませんでした!

PreRenderイベントで、を使用したことにようやく気づきましたResponse.ClearHeaders()。それが問題でした。フォーム認証システムは必要に応じてセッションチケットCookieを更新していましたが、コードが実行される前にヘッダーに追加していたことがわかりました。そのため、ヘッダーをクリアしたとき、ブラウザに送信される前に新しいCookieを消去していました。

ClearHeaders()したがって、セッションが延長されないという問題が発生した場合は、コードが!を使用していないことを確認してください。

于 2010-10-19T18:15:44.217 に答える