【问题标题】:Browser Back Button issue浏览器返回按钮问题
【发布时间】:2012-11-22 03:53:56
【问题描述】:

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

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

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

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

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

提前致谢。

【问题讨论】:

    标签: javascript logging cookies browser browser-history


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 禁用浏览器后退按钮 - 我能够获得三个缓存控制标头作为响应。 "no-cache, no-store, must-revalidate" 但还有 1 个标头剩余,即 max-age=0 。我无法得到这个标题。如何获取 max-age 标头?
    • 不确定您使用的服务器脚本语言。例如,你可以像response.setHeader("Cache-Control", "no-cache, max-age=0, must-revalidate, no-store");
    • 这个问题在很多地方都存在。这是最好的答案。如果你使用 PHP,代码是:header('Cache-Control: no-cache, max-age=0, must-revalidate, no-store');
    【解决方案2】:

    首先感谢您帮助我。

    我终于找到了解决方案。这是简单的解决方案

    首先重写page的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);
    }
    }
     }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      • 2013-07-20
      • 1970-01-01
      • 2011-10-14
      • 2013-12-26
      相关资源
      最近更新 更多