2017-07-03 14 views
0

5分ごとにリフレッシュするASP.NET MVCページがあります。このページは、データのみを表示するために使用されます。このページをホストするために使用されたPCは、何の相互作用もなく数日かかる。ページは数日間はうまくリフレッシュされますが、(それ自身で)このページは2、4、5日後にランダムにログインページにリダイレクトされます。asp.net mvcページが数日後にログインページにリダイレクトされる

何が起こっていますか?

このページのWeb.configに次の属性を追加したのは、データベースが夜間にバックアップを実行している間にタイムアウトしていた可能性があります。

<location path="~/Views/Production/WIPScanStationViewer.aspx"> 
<system.web> 
    <httpRuntime executionTimeout="1000" maxRequestLength="2048576"/>  
</system.web>  
</location> 
+4

アプリプールはリサイクルされていますか?セキュリティクッキーは期限切れですか? –

+0

アプリプールはリサイクルしています。間隔は2740分に設定されており、29時間です。このページは、5日間もログインページにリダイレクトされません。セキュリティクッキーが期限切れになっているかどうかはわかりません。 @SteveGreene – npineda

答えて

0

どのような形式の認証/承認を使用していますか?そうであれば、ログイン画面へのリダイレクトがここでの手掛かりになるはずです。あなたのクッキーはおそらくX日後に期限切れになるように設定されています。あなたがチェックするために、正しい場所AUTHフォームを使用しているので使用してASPNETアイデンティティが

app.UseCookieAuthentication(new CookieAuthenticationOptions 
    { 
     AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
     LoginPath = new PathString("/Account/Login"), 
     Provider = new CookieAuthenticationProvider 
     { 
      // Enables the application to validate the security stamp when the user 
      // logs in. This is a security feature which is used when you 
      // change a password or add an external login to your account. 
      OnValidateIdentity = SecurityStampValidator 
       .OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
       validateInterval: TimeSpan.FromMinutes(30), 
       regenerateIdentity: (manager, user) 
       => user.GenerateUserIdentityAsync(manager)) 
     } 
    }); 

Startup.cs >>Startup.ConfigureAuth(IAppBuilder app)を確認した場合は、このタイムアウト値は、Webの設定になります。あなたは限り、あなたのクッキーがautoのようコンフィグにこのような何かを参照してくださいあなたのクッキーが手動で、あなたは、単に正しいタイムアウト値を持っているあなたのFormsAuthenticationTicketクラスを更新する必要が発生した場合

<!-- 
forms Attributes: 
name="[cookie name]" - Sets the name of the cookie used for Forms 
Authentication. 
loginUrl="[url]" - Sets the URL to redirect client to for authentication. 
protection="[All|None|Encryption|Validation]" - Sets the protection mode for 
data in cookie. 
timeout="[minutes]" - Sets the duration of time for cookie to be valid 
(reset on each request). 
path="/" - Sets the path for the cookie. 
requireSSL="[true|false]" - Should the forms authentication cookie be sent 
only over SSL? 
slidingExpiration="[true|false]" - Should the forms authentication cookie 
and ticket be reissued if they are about to expire? 
--> 

を生成する必要があります。また、.configファイルにクッキー設定値があり、どこかのコードで手動でチケット/クッキーを生成している場合は、手動生成で設定値が上書きされます。

は、コード内でタイムアウトを設定するために、このMSDNのクラス仕様を参照してください。クッキーが問題でない場合https://msdn.microsoft.com/en-us/library/system.web.security.formsauthenticationticket.aspxまた

、あなたが同様にweb.configファイルでセッションの状態を確認することをお勧めします。この人をここからチェックしてください。かなりシンプルです:https://msdn.microsoft.com/en-us/library/h6bb9cz9(v=vs.71).aspx

+0

私は認証のためにフォームモードを使用しています。私は 'Startup.cs'クラスを持っていません – npineda

+0

申し訳ありません、正しくタグ付けするのを忘れました@Adrian – npineda

+0

@Noahpはあなたのチケットかクッキーが自動的に生成されますか?その場合は、web.configファイルを確認してください。私は答えを更新して、その例も示しました – Adrian

0

あなたのセッションクッキーが期限切れになっているようです。そのページを開いて、F12キーを押してデベロッパーを開きます。ツールを開き、[アプリケーション]タブに移動します。一旦そこにいれば、「クッキー」ノードを広げ、あなたのセッションクッキーを検索してください。 「Expires/Max-Age」の欄に有効期限が表示されるので、それが問題の原因であるかどうかを知ることができます。

問題があり、そのページをロードしているWebブラウザが決して閉じられない場合は、値を「セッション」に変更することができます。つまり、有効期限はなく、その代わりにCookieはウェブブラウザが閉じられるとすぐに。

また、X日後または数ヶ月後に期限切れになるように設定することもできますが、正直言って私は本当に長い生涯のクッキーではありません。特に、いつでもクッキーが侵害された場合、クッキーが期限切れでない限り、あなたのセッションにアクセスできます。

関連する問題