【问题标题】:HttpContext.Current.Session is Confused in Asp.net MVC 3.0HttpContext.Current.Session 在 Asp.net MVC 3.0 中被混淆
【发布时间】:2011-11-06 17:48:18
【问题描述】:

我正在使用 ASP.net MVC3.0 应用程序,我将当前用户信息保存在当前 HttpContext 的会话中。

据我所知 HttpContext.Current 是针对当前请求的。因此,我的 Session 数据应该在新请求之后清除。但是,我可以通过存储 HttpContext 从请求到请求接收 Current User session 数据。当前的。我做这个示例是为了测试目的,以了解 MVC 3.0 中的会话管理。

我的问题:我如何在当前请求后接收会话数据?我真的很感谢你的帮助。

public static UserAccountDto CurrentUser
    {
        get
        {
            if (HttpContext.Current == null)
                return null;

            if (HttpContext.Current.Session[CurrentUserSessionVariable] != null)
                return HttpContext.Current.Session[CurrentUserSessionVariable] as UserAccountDto;

            return null;
        }

        private set { HttpContext.Current.Session[CurrentUserSessionVariable] = value; }
    }

【问题讨论】:

    标签: asp.net-mvc-3 session-state session-variables


    【解决方案1】:

    HttpContext.Current等同于:

    HttpContext.Current.Request
    

    最后一个在每个请求中都不同,第一个包含用户、会话、服务器等成员,这些成员在许多(但不是所有)情况下都是一个又一个请求。

    【讨论】:

    • 根据微软的说法,他们说“获取或设置当前 HTTP 请求的 HttpContext 对象”。 msdn.microsoft.com/en-us/library/… ...我很困惑。
    • 是的,但这意味着如果你在两个不同的请求中得到它,里面的一切都与以前完全不同!
    • 嗯.. 我同意了。谢谢
    【解决方案2】:

    您所做的是正确的,您创建的会话变量将可用于创建它的请求之后的所有请求。 HttpContext 是您在 Web 开发中会发现的最大对象之一,并且在幕后做了很多事情。您不会丢失请求之间的会话的原因是服务器将使其保持活动状态。你会惊讶地发现会话在后台使用缓存的特定部分

    【讨论】:

      猜你喜欢
      • 2010-12-28
      • 2017-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多