我已经面对这个问题几个月了,我已经阅读了有关此问题的几乎所有知识,并实施了大多数解决方案,但仍然没有任何改变。我不知道我在哪里犯错。
我正在使用自定义的SessionManager
类在ASP.net CMS网站的管理面板中轻松将值获取/设置为Session
。当用户登录时,我将用户数据存储到Session
,然后在Admin.master页中进行读取以检查用户是否登录。在其他服务器以及本地主机上,SessionManager.CurrentUser
值在随机时间为null,有时为2分钟,有时20分钟登录后,无论页面是否空闲。我所有的网站都有相同的问题。
我的SessionManager.cs是
public class SessionManager
{
public SessionManager() { }
public static User CurrentUser
{
get { return (User)HttpContext.Current.Session["crntUsr"]; }
set { HttpContext.Current.Session["crntUsr"] = value; }
}
public static string CurrentAdminLanguage
{
get
{
if (HttpContext.Current.Session["crntLang"] == null) HttpContext.Current.Session["crntLang"] = SiteSettings.DefaultLanguage;
return HttpContext.Current.Session["crntLang"].ToString();
}
set
{
HttpContext.Current.Session["crntLang"] = value;
}
}
}
注意:用户类别为[可序列化]
在Admin.master Page_Load中
if (SessionManager.CurrentUser == null) Response.Redirect("../login");
在web.config中
<system.web>
<sessionState mode="InProc" customProvider="DefaultSessionProvider" cookieless="UseCookies" regenerateExpiredSessionId="true" timeout="60"/>
<machineKey validationKey="CC0...F80" decryptionKey="8BF...1B5" validation="SHA1" decryption="AES"/>
<authentication mode="Forms">
<forms loginUrl="~/login" timeout="60" slidingExpiration="true" cookieless="UseCookies" />
</authentication>
<system.webServer>
<modules>
<remove name="Session"/>
<add name="Session" type="System.Web.SessionState.SessionStateModule"/>
</modules>
我真的没有更多的想法来解决这个问题。请帮忙 :(
最佳答案
您是否检查了应用程序池回收超时?对于会话“消失”而言,这是一个超出预期的普遍问题。检入IIS