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

时间:2017-01-19 10:03:38

标签: c# asp.net session

我正在运行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分钟后理想。 我不知道自己做错了什么?

1 个答案:

答案 0 :(得分:0)

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

当你的网站上有多个用户时,你会遇到一些导致IIS回收工作进程的内存/ CPU限制。当只有一个用户测试您的站点时,不会达到限制,并且工作进程不会回收。

尝试使用“StateServer”模式,该模式使用外部进程(服务)来存储会话。它将在工人流程的回收中存活下来。