【问题标题】:.NET MVC 5: Losing cookie between requests.NET MVC 5:在请求之间丢失 cookie
【发布时间】: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 设置。也许它会为你工作。
  • 感谢您的帮助,但我早就停止了这个项目的工作。

标签: c# authentication cookies asp.net-mvc-5 identity


【解决方案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;
        }

    }

【讨论】:

    猜你喜欢
    • 2016-07-02
    • 2013-06-20
    • 1970-01-01
    • 2012-11-28
    • 2014-01-06
    • 2021-10-27
    • 2013-12-10
    • 1970-01-01
    • 2014-12-02
    相关资源
    最近更新 更多