Asp.net .ASPXAUTH cookie值始终为空

问题描述 投票:0回答:1

在这里,我有一段代码用asp.net FormAuthenticationTicket制作一个cookie。当我调试代码时,我发现故障单的截止日期是正确的,但cookie的截止日期更改为01/01/0001/12:00:000AM。知道为什么会这样吗?此外,在浏览器中,cookie的名称是.ASPXAUTH,但值为空。因此,每当我们浏览网页时,我们都会被淘汰出局。

身份验证类

public class TicketAuth
{
    public HttpCookie Encrypt(string id)
    { 
        FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, id, DateTime.Now, DateTime.Now.AddHours(3), false, "", FormsAuthentication.FormsCookiePath);
        HttpCookie c = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));
        return c;
    }

    public int Decrypt()
    {
        FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName].Value);
        int key = Convert.ToInt32(ticket.Name);
        return key;
    }
}

调节器

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(Account account)
{
    TicketAuth ticket = new TicketAuth();
    HttpCookie c = ticket.Encrypt(account.Id.ToString());
    HttpContext.Response.Cookies.Add(c);
    if (account.Admin)
    {
        return RedirectToAction("Accounts");
    }
    return RedirectToAction("Bon", "Bon");
}
c# asp.net cookies
1个回答
0
投票

尝试使用Encrypt方法替换此代码

public HttpCookie Encrypt(string id)
{ 
    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, "someName", DateTime.Now, DateTime.Now.AddHours(3), false, id, FormsAuthentication.FormsCookiePath);
    HttpCookie c = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));
    return c;
}

您需要将序列化对象作为FormsAuthenticationTicket构造函数中的第6个参数传递。

© www.soinside.com 2019 - 2024. All rights reserved.