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

时间:2008-11-16 13:48:18

标签: asp.net

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

4 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

好吧,你可以使用一个非常有名的tecnique叫做“Syncronizing Token”或类似的东西= D,主要用来发送表格。

这将是这样的:

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

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

  3. 每个链接请求,例如:“mypage.aspx”将一个名为synctoken的get与另一个令牌放在一起,与你在Session中存储的令牌不同,它就像“mypage.aspx?synctoken = 2iO02-3S23d” ”。

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

  5. 就像:

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

    对不起,如果我不能更清楚..祝你好运!

答案 2 :(得分:0)

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

答案 3 :(得分:-2)

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

相关问题