浏览器后退按钮的注销问题

2023-12-04

我使用 ASP.Net MVC 4 创建了登录/注销功能。我使用自己创建的表单根据 Active Directory 对用户进行身份验证。它的功能运行良好。

安全方面仍然存在一个大问题。用户单击注销链接后,他/她成功注销并再次重定向到登录表单。控制器中的代码如下所示。

    public ActionResult Logout()
    {
        // Tried to include below 3 lines in _Layout.cshtml as well. But not identifying.
        Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
        Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
        Response.Cache.SetNoStore();            

        Session.Abandon();              

        return RedirectToAction("Login");
    }

但是,一旦单击浏览器后退按钮,用户就可以返回到其他页面并浏览页面。

我尝试了几种解决方案、不同的方法,但都没有成功。看起来 MVC 方法与 ASP.NET 表单有很大不同。感谢您对此的帮助。

(我正在寻找使用 C#/ MVC 方式解决这个问题。不使用 JavaScript 在注销时禁用/关闭浏览器。)

UPDATE:代码片段

    [HttpPost]
    public ActionResult Login(LoginModel authUser)
    {
        // Call Helper to get LDAP info. Will return username with groups or null      
        UserModel userProfile = LdapLoginHelper.AuthenticateUser(authUser);

        if (userProfile != null)
        {                
            Session["UserName"] = userProfile.UserName;
            Session["LdapGroups"] = userProfile.LdapGroups;

            if (userProfile.LdapGroups.Contains("Administrators"))
            {
                // To be implemented                   
            }
            else
            {
                // To be implemented      
            }

            // Successful login. Redirect to main page
            return RedirectToAction("Home", "Home");
        }
        else
        {
            // Invalid Login. Redirect to Login page
            return RedirectToAction("Login");
        }            
    }



    public ActionResult Logout()
    {
        // Not worked
        Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
        Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
        Response.Cache.SetNoStore();
        Session.Abandon();

        /// Tried this too. Not worked.
        /// Session.Clear();
        /// FormsAuthentication.SignOut();

        //// Tried this also. Not worked.
        //// WebSecurity.Logout();

        return RedirectToAction("Login");
    }

除了这个常见的 _Layout.cshtml 页面标题如下所示。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="-1">
<meta http-equiv="CACHE-CONTROL" content="NO-CACHE">
.
. 
.

在您的 global.asax 页面中添加以下代码,并从您的 logout() 函数中删除前 3 行。

protected void Application_BeginRequest()
{
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
    Response.Cache.SetNoStore();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浏览器后退按钮的注销问题 的相关文章

随机推荐

  • 将 String 或 Char 转换为 Keys 对象

    如果我使用以下代码 for int i 0 i lt text Length i char c text i Keys k Keys byte c MessageBox Show c ToString k ToString 我只能对大写字母
  • 模板化 Maven 原型

    我正在创建自己的 Maven 原型 这是我使用的项目的通用模板 在该模板中 我有许多 exec maven plugin 块 实际上每个项目都有所不同 这意味着在一个项目中我可能有 2 个 exec maven plugin 块 而在另一个
  • 创建一个基于 libreoffice 文本的数据源并使用 java 设置设置

    我需要在 Java 中创建一个 LibreOffice 基于文本的数据源 我的需求是向用户提供一个包含标题行和 n 个值行的 csv 文件 此 csv 文件是执行邮件合并作业的数据源 如果我使用 LibreOffice 向导手动创建数据源来
  • 通过 Asmack 发送 Image 时创建消息

    我在通过 XMPP 发送图像时遇到一个问题 下面是我完成的代码片段 我不知道代码有什么问题 Message msg new Message emailId Message Type chat ImageTransferExtension t
  • x86,BYTE 和 BYTE PTR 之间的区别

    这两行有什么区别 这里 PTR 发生了什么变化 first mov BYTE ecx 0 second mov BYTE PTR ecx 0 概括 NASM YASM 要求word ecx 当另一个操作数未隐含操作数大小时 否则 ecx i
  • CodeIgniter Upload 类 PDF 文件类型不允许

    在本地工作 但在我尝试过的两台服务器上显示相同的错误消息 使用 Codeigniter 2 1 3 private function upload file config upload path uploads config allowed
  • Kerberos aes-256 加密不起作用

    服务器是RHEL7 Kerberos是AD Windows 我只是KDC的客户 Arcfour hmac 工作正常 但是当我将加密类型更改为 aes 256 并设置新的密钥表时 kinit 仍然可以工作 但 kvno 不能 即使用户似乎拥有
  • 如何在不打电话的情况下从另一个应用程序中打开电话应用程序?

    我试图从我正在制作的应用程序中仅打开 电话 应用程序 而无需拨打号码 我试过了 NSString stringURL tel 但它什么也没做 任何人都有正确的解决方案 我见过关于这个主题的其他问题 但没有一个有效 这适用于打开短信应用程序
  • python 仅记录特定级别

    我使用 python 日志记录模块在 python 代码中记录事件 我也想记录 2 个日志文件 一个包含用户信息 另一个是供开发人员使用的更详细的日志文件 我已将两个日志文件设置为我想要的级别 usr log INFO 和 dev log
  • 为什么 NumPy 高级索引对列表列表和 numpy 数组产生不同的结果?

    我对 NumPy 的高级索引有疑问 I found this问题 但我想我的问题略有不同 在下面的例子中x array是预期的结果 但是当我对列表进行相同的尝试时 结果不同 来自 numpy 文档 当选择对象 obj 是 非元组序列对象 一
  • 是否可以覆盖所有媒体查询?

    我已经构建了一个响应式网站 其中包含针对不同移动设备的媒体查询 但希望在较小的设备上提供 覆盖所有 链接 单击时 该链接将删除所有媒体查询样式并将页面重置为默认样式 以 1024 像素宽的方式显示网站 有办法实现这一点吗 执行此操作的唯一方
  • android studio 3.3 创建新项目后在预览窗口中不显示操作栏和状态栏

    android studio 3 3 在创建新项目后未在预览窗口中显示操作栏和状态栏 我已经在 build graadle module app 文件中尝试过此操作 implementation com android support ap
  • 一条sql语句中的多个select

    我有一个调查答案表 例如 date q1 q2 12 12 10 yes no 12 13 10 no no 我想创建一个查询来获取该表的结果摘要 从而允许我设置相关的日期范围 我下面的声明几乎有效 SELECT SELECT Count
  • 控制器外部的 Orchard 主题属性

    我有一项服务将覆盖响应正文的内容 是否可以在覆盖内容的方法中使用主题 Themed public void forbiddenAlert IHttpContextAccessor Hca overriding response body 不
  • 在不暴露源的情况下将 AWS API Gateway 与 Cloud Front 集成

    我正在开发一个无服务器架构的项目 我发现虽然AWS说API Gateway可以保护您的资源免受DDoS攻击 但如果有坏用户不断向您的服务发送垃圾邮件 API网关无法提供适当的方法来处理此类问题 所以我开始思考我能做什么 AWS WAF 显然
  • R 中具有动态条件的子集数据

    我有一个包含 2500 行的数据集 其中都是银行贷款 每笔银行贷款都有未偿还金额和抵押品类型 房地产 机床等 我需要从该数据集中随机选择一个 例如未偿金额总和 250 万 5 以及相同资产类别的最大 25 贷款 我找到了函数 optim 但
  • Angular 6 FormGroup.disable() 方法不适用于我的模板驱动的 NgForm

    当我尝试在 Angular 6 应用程序中的 formGroup 上使用禁用方法时 我在浏览器控制台中收到此错误 类型错误 this personForm disable 不是一个函数 Although the method is ment
  • Google Speech API 的 Base64 解码失败

    我尝试发送 POST 请求至https speech googleapis com v1 speech recognize使用 JSON 和下面的代码片段 不知何故 谷歌回应说无法解码我的请求中的 Base 64 配置 编码 LINEAR1
  • 鸡蛋掉落拼图 - 需要建议

    问题陈述 掉蛋是指一类问题 其中重要的是找到正确的响应而不超过某些失败状态的 低 数量 在一个玩具示例中 有一座地板塔和一个装有理想鸡蛋的滴蛋器 理想鸡蛋的物理特性是 如果从地板或上方掉落 它会碎裂 如果从地板或下方掉落 则不会造成任何损坏
  • 浏览器后退按钮的注销问题

    我使用 ASP Net MVC 4 创建了登录 注销功能 我使用自己创建的表单根据 Active Directory 对用户进行身份验证 它的功能运行良好 安全方面仍然存在一个大问题 用户单击注销链接后 他 她成功注销并再次重定向到登录表单