浏览器后退按钮问题

时间:2012-11-22 03:53:57

标签: javascript logging cookies browser browser-history

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

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

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

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

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

提前致谢。

2 个答案:

答案 0 :(得分:3)

希望我理解你的问题。您是否真的尝试禁用后退按钮来缓存页面?

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

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

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

答案 1 :(得分:1)

首先感谢帮助我。

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

首先覆盖页面的render方法并在其中写下面的代码。

//插入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);
}
}
 }

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