gpt4 book ai didi

asp.net - 如何防止用户返回上一页?

转载 作者:行者123 更新时间:2023-12-04 12:04:05 26 4
gpt4 key购买 nike

我正在使用 ASP.NET MVC(最新版本)。

想象一下有 2 页:

第1页:“输入数据”>>第2页:“谢谢”

提交第 1 页后,您将被重定向到第 2 页。

我的目标:我想确保您在进入第 2 页后点击浏览器的后退按钮无法返回到第 1 页。相反,我希望您更愿意留在第 2 页(或者每次按下后退按钮时都被推到第 2 页)。

我尝试了所有不同类型的东西。以下只是一些简化的伪代码......

[NoBrowserCache]
public ActionResult Page1(int userId)
{
var user = GetUserFromDb(userId);
if (user.HasAlreadySubmittedPage1InThePast)
{
// forward to page 2
return RedirectToAction("Page2", routeValues: new { userId = userId });
}

var model = new Page1Model();

return View("Page1", model);
}

[NoBrowserCache]
[HttpPost]
public ActionResult Page1(Page1Model model)
{
var user = GetUserFromDb(model.UserId);
if (user.HasAlreadySubmittedPage1InThePast)
{
// forward to page 2
return RedirectToAction("Page2", routeValues: new { userId = model.UserId });
}

// Save posted data to the db
// ...

return RedirectToAction("Page2", routeValues: new { userId = model.UserId });
}

public class NoBrowserCache : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// Haha ... tried everything I found on the web here:
// Make sure the requested page is not put in the browser cache.
filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
filterContext.HttpContext.Response.Cache.SetNoStore();
filterContext.HttpContext.Response.Cache.AppendCacheExtension("no-cache");
filterContext.HttpContext.Response.Cache.SetExpires(DateTime.Now);
filterContext.HttpContext.Response.Expires = 0;
}
}

如果我能确保将请求发送到服务器 每次我点击后退按钮 .但是现在,单击后退按钮只会从浏览器的缓存中拉出第 1 页,而不会向服务器发送请求。所以目前,我没有机会通过服务器方式将您重定向到第 2 页。

有什么想法或建议吗?

谢谢你们!

顺便说一句:不涉及登录/身份验证。所以,我不能使用 Session.Abandon() 或类似的东西。如果可能的话,我宁愿使用一些基于服务器的代码而不是 javascript。

编辑 2017-5-12
在@grek40 之后,我确保反查奇语句最终出现在浏览器中。因此,我从上面的 C# 代码中完全删除了 [NoBrowserCache]-ActionFilterAttribute。相反,我在 _Layout.cshtml 的 部分添加了以下语句:
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">

我确认这三行正在呈现到我的浏览器(使用我的浏览器的开发人员工具进行检查)。但是,缓存仍然有效。我仍然可以在没有任何服务器请求的情况下向后移动。使用 Google Chrome v62、Firefox Quantum v57 和 Microsoft Edge v41(均在 Win10 上)对此进行了测试。 #

编辑 2017-6-12
再次遵循@grek40 的建议:尝试 Expires: 0 以及 Expires: -1。没有不同。我仍然没有设法关闭浏览器的缓存。

enter image description here

最佳答案

最后我找到了解决方案。它基于 javascript,但非常简单。

我只需要将以下代码段添加到我的第 2 页(我不希望用户到达那里后再离开的页面):

<script type="text/javascript">

$(document).ready(function () {
history.pushState({ page: 1 }, "title 1", "#nbb");
window.onhashchange = function (event) {
window.location.hash = "nbb";
};
});

我在这里找到了这个: how to stop browser back button using javascript

感谢大家的支持。但是“我自己的”解决方案是唯一有效的解决方案。

关于asp.net - 如何防止用户返回上一页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47578522/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com