繁体   English   中英

ASP.net C#:任何一个用户的会话都到期/刷新时,所有用户会话都将到期

[英]ASP.net C# : All User Session Expires when any one user's Session Expires/Flushed

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

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

我做了以下

set in web.config
Set session timeout to 60 minutes in IIS manager/Web site 

properties / ASP.NET配置设置在应用程序池属性/性能中将空闲超时设置为60分钟。

<sessionState mode="InProc" cookieless="false" timeout="60" />

我的密码

将值设置为登录时的会话

Session["UserId"] = Convert.ToString(dt.Rows[0]["UserId"]);

检查第Page_PreInit页的会话值

if (Session["UserId"] == null)
{
       Response.Redirect("~/Index.aspx");
}

请求时获取页面上会话的价值

string UserId = Convert.ToString(Session["UserId"]);

当多人登录并处理Page_PreInit事件时,Session [“ UserId”]将为Null,并根据代码重定向到登录页面。 但是当一个人工作或使用Session时,即使经过15分钟理想状态也永远不会为空。 我不知道我做错了什么?

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

奇怪的是,当您的站点上有多个用户时,您遇到了一些内存/ cpu限制,这导致IIS回收工作进程。 当只有一个用户测试您的站点时,将无法达到限制,并且工作进程不会回收。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM