会话变量在asp.net应用程序中丢失值

时间:2012-08-22 01:31:31

标签: asp.net session c#-4.0

在我的asp.net应用程序中,我有一些会话变量。似乎只有几分钟的本地主机和网络主机,他们失去了价值。这种情况并非总是定期发生。我确实有便宜的去爸爸,网络托管,这可能是网络服务器上的问题。感谢您的帮助,这是一个大问题。

   <authentication mode="Forms">
      <forms loginUrl="~/Account/Login.aspx" timeout="3600" defaultUrl="~/" name="" />
    </authentication>
    <sessionState mode="InProc" cookieless="false" timeout="80" />

 public static User User
    {
        get
        {
            User userLogin = null;
            object sessionVar = Session[USERLOGIN];
            if (sessionVar != null)
            {
                userLogin = (User) sessionVar;
            }
            return userLogin;
        }
        set { Session[USERLOGIN] = value; }
    }

2 个答案:

答案 0 :(得分:4)

很有可能您的会话在服务器上被停止和启动,超时或许多其他事情从应用程序池中消失。重点是会话变量本身就是不可靠的持久机制。

如果您需要为登录用户保留信息,请尝试在用户的计算机上存储Cookie,如果会话为空,请从Cookie中的标识数据重新填充。

答案 1 :(得分:1)

如果我能评论我会,显然我不够特别; P大声笑。我必须同意KodeKreachor和Aristos的观点。我不确定为什么业务/合理需要将会话状态保存在内存中。

为了增加积分,主要是因为我讨厌cookie,你可以推出一个解决方案来保持会话状态记录在轻量级数据库中。我的意思是它真的是一个cookie用于,平面文件数据库记录的信息。 SQLite可能是一个很好的解决方案,但除非我能找到其他方法,否则你正在推出自己的解决方案。是的,作为一个充满爱心的Godaddy支持者,他们更便宜的服务有很多不足之处。几乎没有控制系统在共享主机上做了什么。我几个小时与他们的技术部门讨论什么是和不允许的经历可以告诉你。

我还要提到您可能希望使用Log4Net等解决方案向系统添加一些非常详细的日志记录,然后解析日志以获取有关擦除会话状态时实际发生的事情的信息。然后,随着这些信息向前推进,找到一个更清晰的解决方案。

或者只是轻松自己并使用cookies;)

只需修改SQLite = D
HOW TO: Configure SQL Server to Store ASP.NET Session State

当然这里是一个SQLite会话状态提供者
SQLiteSessionStateStore

Apache Log4Net

Great Tutorial Series on using Log4Net by BeefyCode