【问题标题】:How does HttpApplication event flow relate to membership and cookies?HttpApplication 事件流如何与成员资格和 cookie 相关联?
【发布时间】:2011-01-09 05:34:55
【问题描述】:

我在 Global.asax 中覆盖了 Application_AuthenticateRequest() 以尝试更好地理解事件流。我正在使用默认 MVC2 应用程序附带的 Membership Provider。

我想如果我这样做:

    public void Application_AuthenticateRequest(object sender, EventArgs args)
    {
        HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
        if (authCookie != null)
        {
            authCookie.Expires = System.DateTime.Now.AddDays(-1);  // Set the cookie expires time in order to delete it
            Response.Cookies.Add(authCookie);
        }
    }

用户可以登录,但在提交登录表单后加载页面时,他们会显示为未登录,因为我销毁了他们的身份验证 cookie。

然而事实并非如此。相反,他们可以成功登录,并在页面加载时显示他们已登录。他们点击的下一页会将他们注销。

我以为我没有及时销毁他们的 cookie,所以我将该代码放入 Global.asax 中的 Application_BeginRequest() 中。它产生了相同的结果。

这是否意味着我仍然没有及时销毁他们的 cookie,还是我没有正确理解事件的流程?

【问题讨论】:

    标签: c# asp.net-mvc-2 cookies asp.net-membership


    【解决方案1】:

    这里使用了两个 cookie 集合; Request.Cookies 和 Response.Cookies

    Request.Cookies 是来自当前页面的浏览器的 cookie。大多数/所有进程都从此集合中读取。

    Response.Cookies 是要发送回浏览器的 cookie。当你在 Response cookie 上设置 Expires 值时,它首先必须回到浏览器,浏览器看到它已经过期,然后下一页上就没有 cookie。

    您可以尝试设置 Request.Cookies,但我相信它是只读的。

    【讨论】:

    • 有道理。显然,我认为在发回响应后,他们的 cookie 将被删除,这会神奇地追溯影响被发回的响应。哈哈。我可以忍受 1 off page hit 将它们注销。话虽如此,Application_AuthenticateRequest() 是这样的逻辑的好位置吗?
    【解决方案2】:

    使用FormsAuthentication.SignOut();这是注销经过身份验证的用户的首选方式。

    【讨论】:

    • 我需要注销不是当前用户的用户,忘记提了。这是为了禁止。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多