.NET MVC 5:在请求之间丢失 cookie
Posted
技术标签:
【中文标题】.NET MVC 5:在请求之间丢失 cookie【英文标题】:.NET MVC 5: Losing cookie between requests 【发布时间】:2019-07-11 05:41:04 【问题描述】:我已实现自定义身份验证,但成功登录后无法检索身份验证 cookie。
设置cookie:
HttpContext.Current.User = user;
Thread.CurrentPrincipal = user;
string userData = JsonConvert.SerializeObject(user);
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, user.Handle, DateTime.Now, DateTime.Now.AddMinutes(15), false, userData);
string encTicket = FormsAuthentication.Encrypt(authTicket);
HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
HttpContext.Current.Response.Cookies.Add(faCookie);
检索 cookie:
HttpCookie authCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null)
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
user = JsonConvert.DeserializeObject<User>(authTicket.UserData);
问题在于HttpContext.Current.Request.Cookies
不包含FormsAuthentication.FormsCookieName
键并且authTicket
始终为空。
【问题讨论】:
由于您的项目基于 4.7.2 之后的 .NET Framework 版本,我建议您阅读 this 文章以了解 sameSite 设置。也许它会为你工作。 感谢您的帮助,但我早就停止了这个项目的工作。 【参考方案1】:也许您的 cookie 立即过期。请使用 editthiscookie 插件检查您的过期时间。您可以通过此功能使用设置 cookie。
public static bool SetCookie(string cookieName, object value, int expires)
try
HttpCookie cookie_clc = new HttpCookie(cookieName, value.ToString());
cookie_clc.Expires = DateTime.Now.AddMinutes(expires);
HttpContext.Current.Response.Cookies.Add(cookie_clc);
return true;
catch (Exception)
return false;
【讨论】:
以上是关于.NET MVC 5:在请求之间丢失 cookie的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET MVC 5 中的 DefaultThreadCurrentCulture 完整请求
如何在 ASP.NET MVC 中 RedirectToAction 而不会丢失请求数据