2017-03-02 10 views
0

ASP.Net MVCアプリケーションを開発中です。SqlServerモードを使用中にセッションタイムアウトが機能しない

私はsessionStateモードのSQLServerを使用していますが、20分のタイムアウトを設定しています。

<sessionState mode="SQLServer" 
       sqlConnectionString="data source=127.0.0.1;user id=sa;password=sa" 
       cookieless="false" 
       timeout="2" /> 

コードはWeb設定で次のようなものです。

ログインページも設定しました。

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/Login" timeout="2880" /> 
</authentication> 

セッションが期限切れになると、ユーザーログインページに移動します。

私は多くのことを確認しましたが、正しく動作するかどうかわかりませんでしたか?セッションの期限切れでユーザーのログインページをナビゲートするにはどうすればよいですか?

InProcモードで動作しています。私は同じ方法でそれを使用し、ユーザーはセッションが終了したときにログインするようにリダイレクトされます。

しかし、私はSQLServerモードで同じことを達成することができません。

私は何が紛失しているのか理解できません。

私はSession StateをチェックしてもSession timeout handled in SQLServer Mode

編集ことがわかった: - 私は別のHTTP要求がそのセッションのために実行されるたびにログインページにユーザーをリダイレクトしたい 。

+0

セッションは* sliding *タイムアウトを使用します。 Webサイトに再びアクセスするたびに、セッションタイムアウトがリセットされます。 –

+0

@ChrisPrattどのようにこのシナリオに対処する必要がありますか?それはSQLServerモードのためですか? –

+0

それは私が言っていることです。できません。 20分か2時間かに関係なく、ユーザーがアクティブな間、セッションは決してタイムアウトしません。ユーザーがアイドル状態でセッションがタイムアウトした場合、次の要求は単に新しいセッションを開始します。ほとんどの場合、認証は20分後に期限切れになるように設定するだけです。それは必然的にユーザーが20分後に再ログインするように強制します。 –

答えて

1

通常、ブラウザはサーバー上で何が起こっているのかわかりません。 HTTP往復が発生しない限り、ページがレンダリングされたときからのセッションの状態が記憶されます。

さらに、セッションCookieはおそらくHttpOnlyなので、ページがセッションCookieの有無を確認する方法はありません。あなたが望むものを達成するために

一つの方法は次のとおりです。

  1. があなたのページに非表示のiframeを追加します。

  2. ハンドラは、200 OKを返す以外多くを行う必要があり、加えているので、数秒に設定されたリフレッシュヘッダ、しないあなたのウェブサイトにハンドラにiFrameののSRCを設定します。ハンドラは継続的にポーリングされます。ログインページへ

    context.Response.AddHeader("REFRESH", "2"); 
    
  3. 追加framebreakerコード

    if (top.location != location) { 
        top.location.href = document.location.href ; 
    } 
    
  4. ハンドラの要求が期限切れのセッションで発生した場合、それはフォーム認証を経由してログインページにリダイレクトされますよ。ログインページが返されると、iFrameが中断され、フルウィンドウがログインページにリダイレクトされます。

また、他の人が行う操作は、ユーザーが別のページをリクエストするのを待つことです。

+0

ページが別のhttp要求をしたときにセッションの有効期限を確認することもできます。別のHTTPリクエストでセッションが期限切れになったことを確認すると、ユーザーをログインアクションメソッドにリダイレクトしたいと思う。 –

関連する問題