1

我有以下代码将身份验证cookie添加到响应并重定向到主页

HttpCookie authCookie = FormsAuthentication.GetAuthCookie(username, true);
Response.Cookies.Add(authCookie);
Response.Redirect("~/Home/Home.aspx");

但是在Home.aspx中,User.Identity.IsAuthenticated仍然是假的。为什么?

4

2 回答 2

3

终于让它工作了。简而言之,这是

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
        username,
        DateTime.Now,
        DateTime.Now.AddMinutes(30),
        isPersistent,
        userData,
        FormsAuthentication.FormsCookiePath);

      // Encrypt the ticket.
      string encTicket = FormsAuthentication.Encrypt(ticket);

      // Create the cookie.
      Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));

我遵循了MSDN 页面中的代码示例:

于 2012-06-24T06:52:57.577 回答
1

您不必自己将 cookie 添加到响应中。

你正在这样做:

HttpCookie authCookie = FormsAuthentication.GetAuthCookie(username, true);
Response.Cookies.Add(authCookie);
Response.Redirect("~/Home/Home.aspx");

但是,您可以使用以下命令,而不是执行 aGetAuthCookie然后添加它SetAuthCookie

HttpCookie authCookie = FormsAuthentication.SetAuthCookie(username, true);
Response.Redirect("~/Home/Home.aspx");

当您查看SetAuthCookie 的 MSDN 页面时,您会看到它不仅将 cookie 添加到响应(或 URL),而且还创建和加密票证:

为提供的用户名创建一个身份验证票证,并将其添加到响应的 cookie 集合中,如果您使用的是无 cookie 身份验证,则将其添加到 URL。

这可能就是为什么当您尝试自己添加 cookie 时它不起作用的原因。

于 2012-06-24T07:59:38.887 回答