代码之家  ›  专栏  ›  技术社区  ›  balaweblog

当用户单击浏览器刷新按钮时重定向到错误页面

  •  1
  • balaweblog  · 技术社区  · 16 年前

    我需要检查用户是否单击浏览器刷新按钮并重定向到错误页面。我们可以在javascript或ASP.net中的任何服务器端方法中执行此操作吗

    4 回复  |  直到 16 年前
        1
  •  2
  •   Jon Skeet    16 年前

    如果在URL中为每个链接提供一个唯一的ID(例如GUID)作为参数,则可以跟踪已处理的所有请求。(如果有人将浏览器保持打开状态几天,然后点击“刷新”,则可以清除“旧”请求,前提是该机制不起作用。)第一次看到GUID时,将其写入表中。如果您再次看到它,请重定向到错误页面。

    不过这很难看,用户只需编辑URL即可稍微更改GUID。(您可以通过在安装时记录GUID来修复最后一个缺陷 生成 习惯于 .)

    一般来说,用户希望能够刷新页面,尤其是GET请求(即使大多数用户不知道这意味着什么)。你为什么要这样做?

        2
  •  1
  •   José Leal    16 年前

    这将像这样工作:

    1. 创建一个函数以提供伪随机字符串标记。

    2. 对于发送给您的每个请求页面,检查会话中是否存在变量,例如:会话[“synctoken”]如果存在。如果没有,那么这是第一次生成令牌并将其存储在那里。

    3. 然后,返回到(2),在请求中,如果会话中存在令牌,则检查GET是否存在(request.QueryString[“synctoken”]!=null)。如果否,则发送错误消息。如果是,请检查令牌(会话和GET)是否不同。如果它们不同,则可以将GET存储到会话中(会话[“synctoken”]=Request.QueryString[“synctoken”]),然后转到步骤(2)。如果没有,那么用户刷新了页面,就会出现错误。

    if (Session["synctoken"] != null) {
        if (Request.QueryString["synctoken"] != null) {
            if (Request.QueryString["synctoken"].ToString().Equals(Session["synctoken"].ToString())) {
                // Refresh! Goto Error!
                MyUtil.GotoError();
            }
            else {
                // It is ok, store the token and go on!
                Session["synctoken"] = Request.QueryString["synctoken"];
            }
        }
        else {
            MyUtil.GotoErrorPage();
        }
    }
    else {
        Session["synctoken"] = MyUtil.GenerateToken();
    }
    

    对不起,我不能说得更清楚了。。祝你好运

        3
  •  0
  •   Stephan Eggermont    16 年前

    你可以这么做,但我相信你不应该这么做。用户控制着浏览器,如果她想刷新,你的工作就是确保页面刷新。返回错误页面是错误的答案。

        4
  •  -2
  •   Pradeep Kumar Mishra    16 年前