我一直在与此作斗争。在VS 2012中,我使用“Internet应用程序”项目模板创建了一个新的MVC4应用程序(为简单起见,我也使用ExtendedMembershipProvider在常规应用程序中看到了这个问题。)
登录时我想在表单身份验证cookie中放入一些UserData,因此我使用以下代码:
public ActionResult Login(LoginModel model, string returnUrl)
{
Request.Cookies.Remove(FormsAuthentication.FormsCookieName);
if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
{
HttpCookie authCookie = FormsAuthentication.GetAuthCookie(model.UserName, true);
string userData = "This is some test data.";
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
FormsAuthenticationTicket newAuthTicket = new FormsAuthenticationTicket(authTicket.Version, authTicket.Name, authTicket.IssueDate, authTicket.Expiration, authTicket.IsPersistent, userData);
string newAuthTicketEncrypted = FormsAuthentication.Encrypt(newAuthTicket);
authCookie.Value = newAuthTicketEncrypted;
Request.Cookies.Set(authCookie);
// Response.Write("Encrypted cookie value: " + authCookie.Value); // value here differs than what browser sees
// Response.Write("UserData: " + FormsAuthentication.Decrypt(authCookie.Value).UserData + "<br/>"); // userdata is present here.
// return, shortened for brevity
}
}
非常基本。但是,当我解密它时,它不存在于cookie中。问题似乎是某些东西正在管道中的其他地方创建一个新的表单身份验证cookie。我可以通过打印出加密cookie的值,并将其与登录请求后浏览器中显示的值进行比较来证明这一点。它们是不同的!有些东西正在重新创建cookie并加密它,而不存在UserData。名称值存在于cookie中 - 任何想法在哪里或将要做什么? MS是否使用新的WebMatrix方法在表单身份验证中破坏了UserData?
答案 0 :(得分:3)
您正在为在Response对象上设置cookie所需的请求设置cookie。