ASP.NET:为什么身份验证超时后 FormsAuthenticationTicket 为空?

2023-12-06

我正在根据我之前的问题和答案实现身份验证超时检测机​​制here。我已经实现了一个 HTTP 模块,该模块使用 AuthenticateRequest 事件来运行代码来捕获身份验证期限是否已过期。执行此操作的代码如下:

public class AuthenticationModule : IHttpModule
{
    #region IHttpModule Members
    void IHttpModule.Dispose() { }
    void IHttpModule.Init(HttpApplication application)
    {
        application.AuthenticateRequest += new EventHandler(this.context_AuthenticateRequest);
    }
    #endregion


    /// <summary>
    /// Inspect the auth request...
    /// </summary>
    /// <remarks>See "How To Implement IPrincipal" in MSDN</remarks>
    private void context_AuthenticateRequest(object sender, EventArgs e)
    {
        HttpApplication a = (HttpApplication)sender;
        HttpContext context = a.Context;

        // Extract the forms authentication cookie
        string cookieName = FormsAuthentication.FormsCookieName;
        HttpCookie authCookie = context.Request.Cookies[cookieName]; // no longer a forms cookie in this array once timeout has expired

        if (authCookie != null)
        {
            FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
            DateTime expirationTime = authTicket.Expiration;
            // check if previously authenticated session is now dead
            if (authTicket != null && authTicket.Expired)
            {
                // send them a Response indicating that they've expired.
            }
        }
    }
}

问题是,一旦身份验证期限到期(我将其设置为 1 分钟进行测试),就不再有表单 cookie(请参阅代码中的注释)。这意味着身份验证 cookie 将为空,并且我不会让它通过代码中的空检查。但是 FormsAuthenticationTicket 有一个方便的“Expired”属性,我觉得我应该检查该期限是否已过期。但如果 cookie 不再存在,我该如何做到这一点呢?如果不再有表单 cookie,那么假设身份验证期限已过期是否合理?

对此有任何帮助将不胜感激。


您可能想尝试这样的事情:

if (User != null)
        {
            FormsIdentity id = (FormsIdentity)User.Identity;
            FormsAuthenticationTicket ticket = id.Ticket;
            if (ticket.Expired)
            {
               //do something
            }
        }

更多信息

Edit:

1:我看到用户将为空。所以使用 User.Identity 是没有问题的。

2:在 BeginRequest 事件中尝试原始问题中的代码而不是 AuthenticateRequest 怎么样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET:为什么身份验证超时后 FormsAuthenticationTicket 为空? 的相关文章

随机推荐

  • 将 UWP 应用程序连接到远程 SQL Server 2008 提供程序:TCP 提供程序,错误:0

    System Data SqlClient SqlException 已成功与服务器建立连接 但在登录过程中发生错误 提供程序 TCP 提供程序 错误 0 操作成功完成 我正在尝试使用 UWP 应用程序连接到 SQL Server 2008
  • 使用变量替换 shell 脚本中的字符串

    我正在使用下面的代码来替换字符串 在 shell 脚本中 echo LINE sed e s 12345678 replace g 但它正在被取代 replace而不是该变量的值 有人能告诉我出了什么问题吗 如果你想解读 replace 您
  • 如何将这个特定的 json 字符串转换为 python 字典?

    我如何转换这个字符串 gt string name sam 像这样进入 python 字典 gt data name sam In 1 import json In 2 json loads name sam Out 2 u name u
  • JavaScript 使用reduce 从数组创建带有计数的对象

    我正在尝试解决这个小问题 我需要在哪里使用reduce创建一个包含每个项目计数的对象 我以为我明白了reduce有效 使用一个函数将多个值减少到一个 但我不知道这是如何工作的 有什么想法或建议吗 对此 我真的非常感激 var people
  • 使用 MFMailComposer 通过电子邮件发送 CSV 文件

    我想使用带有 csv 扩展名的 NSString 已创建 创建一个文件 然后使用 UIMessage 框架通过电子邮件发送该文件 那么有人可以向我展示创建文件的代码 带有 csv 扩展名和 NSString 的内容 然后如何将其附加到 MF
  • react-native:共享 api,将 base64 字符串而不是图像传递给 WhatsApp

    嘿 我正在努力通过 WhatsApp 分享 Base64 图像 在 iOS 和 Android 中 共享的是实际的基数 64 而不是图像 如果我使用 iMessage 或电子邮件 iOS base64 图像将按预期转换并显示 在 Andro
  • 使用内嵌引号将 JSON 导入到 R 中

    我正在尝试将以下 JSON 文件 my file json 读入 R 其中包含以下内容 id 484 comment They call me Bruce 使用 jsonlite 包 0 9 12 出现以下错误 library jsonli
  • Actionbarsherlock searchview:setOnQueryTextListener

    我正在尝试使用 ActionBarSherlock 的搜索视图在列表中创建一个过滤器 我目前拥有的代码如下 Override public boolean onCreateOptionsMenu final Menu menu getSup
  • 二变量多项式的霍纳规则

    霍纳规则用于简化在特定变量值下评估多项式的 过程 https rosettacode org wiki Horner 27s rule for polynomial evaluation Standard ML 我已经使用 SML 轻松地将
  • 降低 R 中双打的精度

    我正在寻找一种方法 通过使用基本 R 工具而不求助于 C 或 C 始终忽略 R 中浮点数之间的微小差异 这些是根据 IEC 60559 的双精度浮点数 换句话说 我想 四舍五入 双精度浮点数的有效数字部分 这样就可以返回 TRUE 而不是
  • 努力尝试在 .net 4.5 中使用 HttpClient 获取 cookie 响应

    我有以下代码可以成功运行 我不知道如何从响应中获取 cookie 我的目标是我希望能够在请求中设置 cookie 并从响应中获取 cookie 想法 private async Task
  • 如何增加 JFileChooser 的大小?

    我正在编写一个 Java 应用程序 需要在屏幕分辨率非常高的设备上运行 我需要显示的唯一 UI 组件是 JFileChooser 由于屏幕分辨率太高 FileChooser 显得太小 有没有一个简单的命令可以让它变大 理想情况下 我希望保持
  • 如何在 PowerShell 窗口中更改两个引号之间的文本颜色

    我无法更改两个引号之间的文本颜色 现在它的颜色是暗蓝色 我可以在哪里设置此设置或者我必须执行哪个命令 sample PSReadline v1 x 发货时附带Windows PowerShellWindows 10 及更高版本上的 v5 1
  • PHP 数据对象插入未执行

    我的 PHP 表单刚刚更改为使用 PDO 我唯一能告诉的是执行不起作用 我应该用它传递一些东西吗 db new PDO mysql host localhost dbname x charset utf8 x x if db die Cou
  • 为什么 strcmp 在 c 中不起作用? [复制]

    这个问题在这里已经有答案了 我刚刚开始学习 c 我想尝试 strcmp 函数 但如果我运行它 它总是给我结果 1 我输入什么字符串并不重要 由于第一个字符串比第二个字符串短 因此我期望结果为 1 include
  • 准备 JNA 以在 Eclipse 中使用

    背景 我正在做机器学习研究 并且想使用FANN构建神经网络的库 源代码是用 C 编写的 但我需要对其进行包装 以便我可以将它与我们创建的许多 Java 类一起使用 问题 该网站提供了一个已广受好评的名为 fannj 的包装软件的链接 它的依
  • 变量和打印变量之间的区别[重复]

    这个问题在这里已经有答案了 我有以下代码 假设我正在 IDLE 中逐行输入 coding utf 8 s u My Currency is s print s for s 我得到一个输出 u My Currency is xa3 for p
  • 如何防止JasperReports TextField中的重复数据

    我在用贾斯珀报告文本字段数据存在一些问题 请继续下一页 我在详细信息带中有 3 个文本字段 带 splitType 拉伸 每个文本字段都有边框 并且 isPrintWhenDetailOverflows 参数设置为 true 当文本字段中的
  • 内部编译器错误:总线错误

    我试图制作一个带有详细信息视图的 UITableView 但出现两个错误 在以下代码之后 我得到了两次相同的错误 内部编译器错误 总线错误 我不知道为什么 有人能帮我吗 您可以在下面找到代码的图像here void tableView UI
  • ASP.NET:为什么身份验证超时后 FormsAuthenticationTicket 为空?

    我正在根据我之前的问题和答案实现身份验证超时检测机 制here 我已经实现了一个 HTTP 模块 该模块使用 AuthenticateRequest 事件来运行代码来捕获身份验证期限是否已过期 执行此操作的代码如下 public class