【问题标题】:Redirect to Error page when user clicks the Browser Refresh button当用户单击浏览器刷新按钮时重定向到错误页面
【发布时间】:2008-11-16 22:44:30
【问题描述】:

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

【问题讨论】:

    标签: asp.net


    【解决方案1】:

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

    但它非常难看,用户只需编辑 URL 以稍微更改 GUID。 (您可以通过在生成它时记录 GUID 来修复最后一个缺陷,并更新表格以指示它何时被使用。)

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

    【讨论】:

      【解决方案2】:

      嗯,你可以使用一种非常有名的技术,叫做“同步令牌”或类似的东西 =D,主要用于发送表单。

      这将像这样工作:

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

      2. 对于您页面的每个请求,检查 Session 中是否存在变量,例如:Session["synctoken"] 如果存在。如果不是,那么它是第一次,生成一个令牌并将其存储在那里。

      3. 1234563 ”。
      4. 然后,回到 (2),在请求中,如果 Session 中存在令牌,请检查 GET 是否存在 (Request.QueryString["synctoken"] != null)。如果否,则发送错误。如果是,请检查令牌(会话和 GET)是否不同。如果它们不同,没关系,将 GET 存储到您的 Session (Session["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】:

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

      【讨论】:

        【解决方案4】:

        您可以使用客户端隐藏变量来存储计数器,也可以将计数器放入会话中。好吧,我建议您在刷新时使页面过期,有一些方法可以实现此禁用缓存等[就像所有银行网站一样]。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-06-23
          • 1970-01-01
          • 1970-01-01
          • 2012-06-20
          • 2010-12-30
          • 1970-01-01
          • 1970-01-01
          • 2018-03-14
          相关资源
          最近更新 更多