ASP.net C#:当任何一个用户';s会话过期/刷新
我正在运行一个ASP.NET 4.0(C#)应用程序,该应用程序托管在共享服务器上。当多人工作时,会话将在没有理想的情况下过期,但当单人工作时,即使在理想的15-20分钟后,会话也不会过期 最糟糕的是有人注销(因为会话过期),所有使用系统的用户都将注销。 我已经做了以下工作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配置设置 在应用程序池属性/性能中将空闲超时设置
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"]);