我正在尝试检查用户当前FormauthenticationTicket的过期属性,以查看身份验证期是否已过期。但是,当期间过期时,我将永远无法获得足够的信息来创建票证进行检查。我已经尝试了:

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

但是当身份验证期过期后,用户为无效。这样就无法正常工作。我已经尝试了:

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

但是,当身份验证期过期时,cookie的表格就消失了,这意味着Authcookie将无效。所以这行不通。

有什么方法可以 得到 当身份验证期过期时,formauthenticationTicket对象?必须有,因为对象中有一个“过期”的属性。我想念什么?

谢谢。

有帮助吗?

解决方案

客户浏览器将过期的cookie排除在外。因此,没有代码来检索它,因为客户永远不会将其提供给您。可能使用JavaScript cookie检索原始cookie数据并将其放入后标头或AJAX呼叫中,但我相信JavaScript Cookie机制具有与浏览器相同的到期限制。过期的cookie不再有效,因此无法访问。

其他提示

假设浏览器(仅IE)不会删除已过期的 曲奇饼, ,ASP.NET似乎剥离了过期的身份验证 从请求中出发。它仍在请求中。header[“ cookie”],但在cookie Collection中不可用。我相信这发生在“开始”和“ AuthenticateRequest”事件之间。我遇到了同一问题,我自己正在进一步探索。

    void context_BeginRequest(object sender, EventArgs e)
    {
        string cookie = ((HttpApplication)sender).Context.Request.Cookies[".ASPXFORMSAUTHSS"].Value;
        FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie);
    }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top