1

私のWebアプリケーションでは、数分間何もしていないときに、戻ってきてページを更新すると、まだログインしているのに、セッションデータがすべてなくなっていることがよくあります!

アクションでは、ページが正しく機能するために必要なlogin()いくつかのオブジェクトを設定しています。Session[]なぜそうしているのかわかりませんが、セッションデータをクリアするたびにユーザーをログアウトする必要があります。

設定について読みまし<sessionState mode="InProc" timeout="20"/>たが、このタイムアウトはページを更新するたびに更新されますか? それともログインしてから20分経つとなくなりますか?このタイマーを、ユーザーをオンラインにしておくよりも大きくするとどうなりますか?

4

3 に答える 3

3

サーバーにポストバックすると、セッションがより長く存続します。スライド有効期限です。クライアントから処理するには 2 つの方法がありますが、クライアントはこの 20 分間のタイムアウトを認識していません。

  • 20 分に達したときにログアウト ページにリダイレクトするクライアント JavaScript を使用してタイマーを作成します。
  • ポストバックが発生するたびに、セッションの有効期限が切れたかどうかを確認し (これは、Session.IsNewSession の確認、オブジェクトが失われたかどうかの確認など、さまざまな方法で実行できます)、リクエストを処理する前にログアウト ハンドラーにリダイレクトします。
于 2013-02-01T21:01:13.237 に答える
1

フォーム認証を使用していると思います。あれは正しいですか?その場合、フォーム認証チケットのタイムアウトをセッション タイムアウトと一致させる必要があります。

ユーザーは、最初に思われるよりも複雑なプロセスを経てログインしたままになります。Cookie は、フォーム認証チケットと呼ばれるユーザーのブラウザーに保存されます。ユーザーがセッション タイムアウト制限を超えてアイドル状態のままである場合、サーバーはセッションを破棄します。ただし、次の要求では、フォーム認証チケットが Web サーバーに返されます。サーバーはチケットを検証し、チケットがまだ有効である場合、ユーザーは再度ログインします。

ご覧のとおり、ユーザーのセッションは復元されていません。その動作が必要な場合は、その状態を検出して、自分でセッションを復元する必要があります。

解決策は、フォーム認証チケットのタイムアウトをセッション タイムアウトと同じに設定することです。ここで説明されているように、Web.config ファイルでそれを実現します。

<system.web>
    <authentication mode="Forms">
          <forms timeout="20"/>
    </authentication>
</system.web>

タイムアウト値は分単位です。フォーム認証チケットのタイムアウトに達すると、ユーザーはログアウトされます。これはセッションのタイムアウトとは無関係に動作しますが、それらが同じである場合、それらはほぼ同時に期限切れになります。完全に安全にしたい場合は、フォーム認証チケットのタイムアウトをセッションのタイムアウトより少し短く設定してください。ユーザーは、セッションがタイムアウトする前にログアウトされます。再度ログインすると、新しいセッションが取得されます。古いセッションは、最終的には自動的にタイムアウトします。

于 2013-02-01T21:12:16.103 に答える
0

これを確認してみてください:

Q: Proc モードで、ときどきすべてのセッションが失われるのはなぜですか?

A: この記事の「セッション状態モードについて」セクションの「堅牢性」セクションを参照してください。

堅牢性

InProc - ワーカー プロセス (aspnet_wp.exe) がリサイクルされるか、appdomain が再起動されると、セッション状態は失われます。これは、セッション状態が appdomain のメモリ空間に格納されるためです。再起動は、web.config や machine.config などの特定の構成ファイルの変更、または \bin ディレクトリの変更 (VS を使用してアプリケーションを再コンパイルした後の新しい DLL など) によって発生する可能性があります。詳細については、KB324772 を参照してください。 . v1 では、ワーカー プロセスが再起動するバグもあります。SP2 および v1.1 で修正されています。KB321792 を参照してください。

ソース - http://forums.asp.net/t/7504.aspx/1

于 2013-02-01T21:01:53.690 に答える