我正在运行ASP.NET 4.0(C#)应用程序托管在共享服务器上。当多个人工作时,Session将在没有理想的情况下过期,但是当单身人员工作时,即使在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" />
我的代码,
在登录时将值设置为会话
Session["UserId"] = Convert.ToString(dt.Rows[0]["UserId"]);
检查Page Page_reInit
的会话值if (Session["UserId"] == null)
{
Response.Redirect("~/Index.aspx");
}
重新获得页面上的会话值
string UserId = Convert.ToString(Session["UserId"]);
当多人登录并处理Page_PreInit事件时,会话[&#34; UserId&#34;]将为Null并按照代码重定向到登录页面。但是当单身人士工作或使用Session时永远不会变为空,即使在15分钟后理想。 我不知道自己做错了什么?
答案 0 :(得分:0)
您正在使用“InProc”作为会话状态,因此您的Session对象将保存在ASP.NET辅助进程中。当应用程序池循环使用时,您的工作进程将重新启动,并且会话状态将丢失。
当你的网站上有多个用户时,你会遇到一些导致IIS回收工作进程的内存/ CPU限制。当只有一个用户测试您的站点时,不会达到限制,并且工作进程不会回收。
尝试使用“StateServer”模式,该模式使用外部进程(服务)来存储会话。它将在工人流程的回收中存活下来。