我有以下代码将身份验证cookie添加到响应并重定向到主页
HttpCookie authCookie = FormsAuthentication.GetAuthCookie(username, true);
Response.Cookies.Add(authCookie);
Response.Redirect("~/Home/Home.aspx");
但是在Home.aspx中,User.Identity.IsAuthenticated
仍然是假的。为什么?
我有以下代码将身份验证cookie添加到响应并重定向到主页
HttpCookie authCookie = FormsAuthentication.GetAuthCookie(username, true);
Response.Cookies.Add(authCookie);
Response.Redirect("~/Home/Home.aspx");
但是在Home.aspx中,User.Identity.IsAuthenticated
仍然是假的。为什么?
终于让它工作了。简而言之,这是
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 页面中的代码示例:
您不必自己将 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 时它不起作用的原因。