Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果由于ASP.NET MVC 4应用程序池中设置的空闲超时而导致应用程序超时,我们如何警告用户_C#_Asp.net Mvc 4_Forms Authentication_Session Timeout - Fatal编程技术网

C# 如果由于ASP.NET MVC 4应用程序池中设置的空闲超时而导致应用程序超时,我们如何警告用户

C# 如果由于ASP.NET MVC 4应用程序池中设置的空闲超时而导致应用程序超时,我们如何警告用户,c#,asp.net-mvc-4,forms-authentication,session-timeout,C#,Asp.net Mvc 4,Forms Authentication,Session Timeout,在我的ASP.NET MVC 4应用程序中,我正在使用表单身份验证,并已将会话超时设置为600分钟(10小时),将表单身份验证超时设置为550分钟。我还将此应用程序使用的应用程序池的空闲超时设置为50分钟 如果一个用户的应用程序空闲超过50分钟,而没有其他用户登录(或者其他登录用户也没有使用该应用程序超过50分钟),则该应用程序将超时。在这种情况下,我想警告用户——在45分钟后,即将到来的超时,以便用户可以在应用程序超时之前保存他们的数据(如果他/她愿意)。如何实现这一点?我不确定你能对应用程序

在我的
ASP.NET MVC 4
应用程序中,我正在使用表单身份验证,并已将
会话超时设置为600分钟(10小时),将
表单身份验证超时设置为550分钟。我还将此应用程序使用的应用程序池的
空闲超时设置为50分钟


如果一个用户的应用程序空闲超过50分钟,而没有其他用户登录(或者其他登录用户也没有使用该应用程序超过50分钟),则该应用程序将超时。在这种情况下,我想警告用户——在45分钟后,即将到来的超时,以便用户可以在应用程序超时之前保存他们的数据(如果他/她愿意)。如何实现这一点?

我不确定你能对应用程序池做些什么,因为它随时都可能出现。您可以将会话提供程序移动到数据库中,这样,如果应用程序池关闭并重新启动(在10小时内),您的用户将从同一会话继续


您还可以在超时X小时时使用一些javascript来弹出消息或警告。它将在每次页面加载时重置。不过,机会是,如果他们已停用10小时,他们将无法根据消息采取行动,因此您最好将他们重定向到一个页面,说明他们的会话已超时。

您可以将表单身份验证转换为使用持久化身份验证cookie,以便将用户登录存储在通过浏览器持久化的cookie中会议。“该cookie是使用web.config或machine.config中的servers machinekey加密的”

在这种情况下,应用程序池是否关闭并不重要。当用户再次访问站点时,它将进行旋转备份,其cookie将被Forms Authentication Http模块查看/处理,并且他们仍将登录,并且由于他们已登录,因此无论是否保存数据,都应能够查找任何数据

其次,如果他们有需要保存的客户端数据,您应该保持与服务器的连接“例如,通过ajax或其他方式使用javascript定时器调用刷新方法”


您不应该将站点设计为依赖w3wp.exe中的数据。它的设计应确保w3wp.exe可以随时关闭,并进行旋转备份,返回到原来的位置,而不会丢失任何数据。

警告用户的行为将产生进出网站的流量,有效地刷新超时时间,并使整个练习点变得毫无意义。当数据不再超时时,为什么要保存数据?此外,当应用程序池关闭时,他们的会话将丢失,除非您使用的是面向数据库的会话。因此,将其设置为10小时并不是绝对的。而且,在您的示例中。。。您的站点将如何处理随机windows update重新启动或运行iisreset的管理员?它们会导致w3wp.exe在超时窗口之外全部关闭。根据您的建议,我通过设置
FormsAuthentication.SetAuthCookie(RegisterUser.UserName,true)尝试了持久cookie但是当我在20分钟后刷新页面时,它在20分钟后仍然过期(应用程序池的空闲超时)。我可能缺少什么?增加cookie的超时时间,并设置滑动过期时间以刷新cookie。另外,如果您使用的是会话状态,请将其切换到数据库模式,而不是进程中。在SqlServer模式下,会话状态数据存储在sql数据库中,而不是存储在进程中。