我已经面对这个问题几个月了,我已经阅读了有关此问题的几乎所有知识,并实施了大多数解决方案,但仍然没有任何改变。我不知道我在哪里犯错。

我正在使用自定义的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

10-07 22:08