【问题标题】:Session variable loses value in asp.net application会话变量在 asp.net 应用程序中失去价值
【发布时间】:2012-08-17 09:52:58
【问题描述】:

在我的 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; }
    }

【问题讨论】:

  • 您的会话保存在内存中 (InProc) 这可以出于任何原因清除,例如池重启/重置。

标签: asp.net session c#-4.0


【解决方案1】:

很有可能您的会话在服务器上因应用程序池被停止和启动、超时或许多其他原因而被清除。要点是会话变量本身是不可靠的持久性机制。

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

【讨论】:

    【解决方案2】:

    如果我可以发表评论,我会,显然我不够特别;P 大声笑。在这两点上,我都必须同意 KodeKreachor 和 Aristos 的观点。我不确定为什么需要将会话状态保存在内存中。

    补充一点,主要是因为我讨厌 cookie,您可以推出一个解决方案,将会话状态记录在轻量级数据库中。我的意思是它真的是一个 cookie,用于平面文件数据库信息记录。 SQLite 可能是一个很好的解决方案,但除非我能找到其他方法,否则您将在此基础上推出自己的解决方案。是的,作为一个热爱 Godaddy 的支持者,他们更便宜的服务有很多不足之处。几乎无法控制系统对共享主机的操作。我与他们的技术部门讨论什么是允许的,什么是不允许的,我的经验可以告诉你。

    我还要提到,您可能希望使用诸如 Log4Net 之类的解决方案将一些非常详细的日志记录添加到系统中,然后解析日志以获取有关在擦除会话状态时实际发生的情况的信息。然后带着这些信息继续寻找更清晰的解决方案。

    或者对自己放松一点,使用 cookie ;)

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

    这里当然是一个 SQLite Session State Provider
    SQLiteSessionStateStore

    Apache Log4Net

    Great Tutorial Series on using Log4Net by BeefyCode

    【讨论】:

      猜你喜欢
      • 2013-11-17
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-28
      • 2010-09-17
      相关资源
      最近更新 更多