在ASP.NET MVC中,我们在iOS上禁用后退和前进缓存时遇到问题。出于安全原因,我们不希望从后退和前进按钮访问我们网站中的任何页面。我们尝试过设置:
[OutputCache(NoStore = true, Duration = 1)]
还有其他一些东西,但没有任何作用。我们甚至无法在onunload事件中做任何事情,因为iOS也忽略了这一点。有什么想法吗?
答案 0 :(得分:4)
我们最终如何解决这个问题是在布局视图中执行此操作:
<script type="text/javascript">
@Html.Raw("var freshPage = true;")
</script>
当javascript变量运行在我们的C#代码中时,它会将javascript变量设置为true,该代码告诉我们页面是新鲜的并且通过我们的控制器代码。然后我们将它放在我们的全局javascript文件中,以便在页面被拉起时检查该变量:
window.addEventListener('popstate', function () {
// If fresh page is false that means it is a cached page, remove html and reload page.
if (!freshPage) {
$('html').remove();
window.location.reload();
} else {
freshPage = false;
}
});
这是我们发现iOS从缓存加载页面时触发的唯一事件。即使用户通过检查该变量使用后退和前进按钮,这也会强制iOS始终运行我们的服务器端代码。如果是第一页加载,则会看到新页面为真,然后将其翻转为false。然后,如果用户回击或转发并返回此页面,此代码将运行,请参阅freshPage为false,因为它没有运行我们的C#代码,终止html,并强制重新加载页面。 / p>