Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.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
ASP.net C#:当任何一个用户';s会话过期/刷新_C#_Asp.net_Session - Fatal编程技术网

ASP.net C#:当任何一个用户';s会话过期/刷新

ASP.net C#:当任何一个用户';s会话过期/刷新,c#,asp.net,session,C#,Asp.net,Session,我正在运行一个ASP.NET 4.0(C#)应用程序,该应用程序托管在共享服务器上。当多人工作时,会话将在没有理想的情况下过期,但当单人工作时,即使在理想的15-20分钟后,会话也不会过期 最糟糕的是有人注销(因为会话过期),所有使用系统的用户都将注销。 我已经做了以下工作 set in web.config Set session timeout to 60 minutes in IIS manager/Web site 属性/ASP.NET配置设置 在应用程序池属性/性能中将空闲超时设置

我正在运行一个ASP.NET 4.0(C#)应用程序,该应用程序托管在共享服务器上。当多人工作时,会话将在没有理想的情况下过期,但当单人工作时,即使在理想的15-20分钟后,会话也不会过期

最糟糕的是有人注销(因为会话过期),所有使用系统的用户都将注销。

我已经做了以下工作

set in web.config
Set session timeout to 60 minutes in IIS manager/Web site 
属性/ASP.NET配置设置 在应用程序池属性/性能中将空闲超时设置为60分钟

<sessionState mode="InProc" cookieless="false" timeout="60" />
检查Page_PreInit的会话值

if (Session["UserId"] == null)
{
       Response.Redirect("~/Index.aspx");
}
重新查询时获取页面上会话的值

string UserId = Convert.ToString(Session["UserId"]);
当多人登录并处理Page_PreInit事件会话时,[“UserId”]将为空,并根据代码重定向到登录页面。但当单人工作或使用会话时,即使在15分钟后,会话也不会变为空。 我不知道我做错了什么

您正在使用“InProc”作为会话状态,因此您的会话对象将保存在ASP.NET工作进程中。当应用程序池回收时,工作进程将重新启动,会话状态将丢失

当您的站点上有多个用户时,很可能会遇到一些内存/cpu限制,从而导致IIS回收工作进程。当只有一个用户在测试您的站点时,就没有达到限制,工人流程也没有回收


尝试使用“StateServer”模式,该模式使用外部进程(服务)存储会话。它将经受工作进程的循环。

在创建sessionDenish时放入完整代码,没有什么比完整代码更好的了。我制作了一个示例应用程序,该应用程序具有上述给定设置的web配置。我在登录时在会话UserId中写入值。您可以假设“1”,然后在第Page\u页中,PreInit检查会话是否为空,并根据上面的代码获取会话值,仅用于日志。我尝试使用StateServer,但它没有到达会话\u结束,因此我无法保存过期日期时间戳。
string UserId = Convert.ToString(Session["UserId"]);