C# .NET MVC 5:在请求之间丢失cookie

C# .NET MVC 5:在请求之间丢失cookie,c#,authentication,cookies,asp.net-mvc-5,identity,C#,Authentication,Cookies,Asp.net Mvc 5,Identity,我已经实现了自定义身份验证,但在成功登录后无法检索身份验证cookie 设置cookie: HttpContext.Current.User = user; Thread.CurrentPrincipal = user; string userData = JsonConvert.SerializeObject(user); FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, user.Handle, D

我已经实现了自定义身份验证,但在成功登录后无法检索身份验证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);
HttpCookie authCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null)
{
    FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
    user = JsonConvert.DeserializeObject<User>(authTicket.UserData);
}
正在检索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);
HttpCookie authCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null)
{
    FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
    user = JsonConvert.DeserializeObject<User>(authTicket.UserData);
}
HttpCookie authCookie=HttpContext.Current.Request.Cookies[FormsAuthentication.formscookeName];
if(authCookie!=null)
{
FormsAuthenticationTicket authTicket=FormsAuthentication.Decrypt(authCookie.Value);
user=JsonConvert.DeserializeObject(authTicket.UserData);
}

问题是
HttpContext.Current.Request.Cookies
不包含
FormsAuthentication.FormsCookieName
键,并且
authTicket
始终为空。

可能您的cookie立即过期。请使用editthiscookie插件检查您的过期时间。您可以通过此函数使用set 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;
        }

    }

可能您的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 Framework的版本,该版本超过了4.7.2,因此我建议您阅读一篇关于sameSite设置的文章。也许它会对你有用。谢谢你的帮助,但我早就停止了这个项目的工作。因为你的项目基于.NET Framework版本,超过了4.7.2,我建议你阅读一篇关于sameSite设置的文章。也许对你有用。谢谢你的帮助,但我早就停止了这个项目的工作了。