0

谁能帮我解决,浏览器后退按钮问题?当用户从浏览器历史列表中选择任何页面时,我想执行一些服务器端处理。例如,当您从应用程序注销时,当您单击后退按钮时,我不想显示他访问过的上一页。在我的项目中,我有一些其他页面需要刷新操作才能使页面处于一致状态。

为了解决这个问题,我尝试从代码中添加 cookie,并将 cookie 值设置为 false。并使用 Javascript 我正在检查该 cookie 值。如果它为假,那么什么都不做,重新加载页面。之后我将该cookie更改为true。但是当我更改cookie值时,我想更新现有cookie,但它正在插入一个新cookie。

这是修改我正在使用的cookie的脚本

document.cookie= c_name+ "=" + c_value;
               //c_name- CookieName ; c_value-Cookie value;

这是正确的解决方案吗?或者有没有更好的解决方案?

提前致谢。

4

2 回答 2

3

希望我能正确理解您的问题。您是否真的试图禁用后退按钮缓存您的页面?

如果是这样,您需要添加以下 http 标头,以便浏览器不会缓存该页面。

Cache-Control: no-cache, max-age=0, must-revalidate, no-store

此外,关于处理站点登录,我认为您可能需要考虑使用 Sessions 而不是 Cookies。您只需在服务器上创建一些会话变量,这些变量可用于存储用户 ID、活动会话 ID 等,当页面加载时,您检查该会话值并查看它是否有效,以便您决定哪种类型的页面内容需要在客户端显示。

于 2012-11-22T04:36:44.727 回答
1

首先感谢您帮助我。

最后我得到了解决方案。这是简单的解决方案

首先覆盖页面的渲染方法并在其中编写以下代码。

//插入Cookie避免Borwser后退按钮问题

if (Request.Cookies["loadedFromServer"] != null)
Response.Cookies.Set(Request.Cookies["loadedFromServer"]);
else
Response.Cookies.Set(new HttpCookie("loadedFromServer", ""));

Response.Cookies["loadedFromServer"].Value = "true";

并在母版页中编写以下脚本。

function ClearCookie() {
var CACHE_COOKIE = 'loadedFromServer';
var loadedFromServer = getCookie(CACHE_COOKIE) == 'true';
if (loadedFromServer.toString() == "false") {
location.reload();
}
document.cookie = CACHE_COOKIE + '=' + getCookie(CACHE_COOKIE) + '; expires=Thu, 01 Jan                            1970 00:00:01 UTC; path=/;';
}

function getCookie(c_name) {
var i, x, y, ARRcookies = document.cookie.split(";");
for (i = 0; i < ARRcookies.length; i++) {
x = (ARRcookies[i].substr(0, ARRcookies[i].indexOf("="))).trim();
y = (ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1)).trim();
x = x.replace(/^\s+|\s+$/g, "");
 if (x == c_name) {
return unescape(y);
}
}
 }

并每次在母版页中调用该函数。

于 2012-11-28T03:53:04.593 回答