2

我正在尝试检查用户当前 FormsAuthenticationTicket 的 Expired 属性,以查看身份验证期限是否已过期。但是当期限到期时,我永远无法获得足够的信息来创建要检查的票。我试过这个:

FormsIdentity id = (FormsIdentity)User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;

但是当认证期限到期时,用户为空。所以这行不通。我试过这个:

HttpCookie authCookie = context.Request.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);

但是当认证期限到期时,Forms Cookie 就消失了,这意味着 authCookie 将为空。所以这行不通。

身份验证期已过时,有什么方法可以实际获取FormsAuthenticationTicket 对象?必须有,因为对象中有一个“过期”属性。我错过了什么?

谢谢。

4

2 回答 2

4

假设浏览器(仅限 IE)没有删除过期的cookie,ASP.Net 似乎从 Request.Cookies 集合中删除了过期的身份验证票。它仍然存在于 Request.Header["Cookie"] 中,但在 cookie 集合中不可用。我相信这发生在“BeginRequest”和“AuthenticateRequest”事件之间的某个时间。我遇到了同样的问题,我自己也在进一步探索。

    void context_BeginRequest(object sender, EventArgs e)
    {
        string cookie = ((HttpApplication)sender).Context.Request.Cookies[".ASPXFORMSAUTHSS"].Value;
        FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie);
    }
于 2011-01-06T23:08:52.117 回答
2

客户端浏览器将过期的 cookie 排除在标头之外。所以没有检索它的代码隐藏方法,因为客户端永远不会把它给你。出于某种目的,可能使用 javascript cookie 来检索原始 cookie 数据并将其放入 post 标头或 AJAX 调用中,但我相信 javascript cookie 机制与浏览器具有相同的过期限制。过期的 cookie 不再有效,因此无法访问。

于 2010-12-20T16:57:52.417 回答