.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的主要内容,如果未能解决你的问题,请参考以下文章

AJAX 请求不发送 cookie (NET 5)

ASP.NET MVC 5 中的 DefaultThreadCurrentCulture 完整请求

在Web请求之间设置cookie不会持久存在

如何在 ASP.NET MVC 中 RedirectToAction 而不会丢失请求数据

ASP.NET MVC - 在匿名 Ajax 请求上刷新 Auth Cookie

带有 .Net Core 3.1 MVC 应用程序的 Google App Engine - 控制器之间的会话数据丢失