2012-11-22 217 views
0

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

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

这是修改cookie中的脚本,我使用

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

这是正确的解决方案?还是有更好的解决方案?

在此先感谢。

回答

2

希望我能理解你的问题。你真的试图禁用后退按钮缓存你的网页?

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

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

此外,关于处理场所登录,我想你可能要考虑使用会话代替饼干的。你只需要在你的服务器上创建一些会话变量,这些变量可以用来存储用户ID,活动会话ID等等,当页面加载时,你检查会话的值,看看它是否有效,这样你可以决定什么样的类型的页面内容需要在客户端显示。

+0

禁用浏览器后退按钮 - 我能够在回应中实现三个缓存控制标题。 “no-cache,no-store,must-revalidate”,但还剩下1个标题,即max-age = 0。我无法得到这个标题。如何获得最大年龄头? –

+0

不确定您使用的服务器脚本语言。作为一个例子,你可以像'response.setHeader(“Cache-Control”,“no-cache,max-age = 0,must-revalidate,no-store”);' – woodykiddy

+0

这个问题在很多地方都存在。这是最好的答案。如果你使用PHP,代码是:header('Cache-Control:no-cache,max-age = 0,must-revalidate,no-store'); –

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); 
} 
} 
} 

每次在主页面调用该函数。