我需要检查用户是否单击浏览器“刷新”按钮并重定向到错误页面。我们可以在javascript或ASP.net中的任何服务器端方法中执行此操作
答案 0 :(得分:2)
如果您为每个链接提供URL中的唯一ID(例如GUID)作为参数,那么您可以跟踪您已处理的所有请求。 (如果你不介意如果有人让浏览器打开几天然后点击刷新,那么你可以清除“旧”请求。)第一次看到GUID时,将其写入表中。如果再次看到它,请重定向到错误页面。
但它非常难看,用户只需编辑URL即可稍微更改GUID。 (您可以通过在生成时记录GUID来修复此最后一个缺陷,并更新表以指示何时使用。)
通常,用户希望能够刷新页面 - 特别是对于GET请求(即使大多数用户不知道这意味着什么)。你为什么要这样做?
答案 1 :(得分:1)
好吧,你可以使用一个非常有名的tecnique叫做“Syncronizing Token”或类似的东西= D,主要用来发送表格。
这将是这样的:
创建一个函数来提供伪随机字符串标记。
对于您的每个请求页面,检查Session中是否有变量,例如:Session [“synctoken”](如果存在)。如果不是,那么这是第一次生成令牌并将其存储在那里。
每个链接请求,例如:“mypage.aspx”将一个名为synctoken的get与另一个令牌放在一起,与你在Session中存储的令牌不同,它就像“mypage.aspx?synctoken = 2iO02-3S23d” ”。
然后,回到(2),在请求中,如果会话中存在令牌,则检查是否存在GET(Request.QueryString [“synctoken”]!= null)。如果不是,请发送错误。如果是,请检查令牌(会话和GET)是否不同。如果它们不同,则可以将GET存储到会话中(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();
}
对不起,如果我不能更清楚..祝你好运!
答案 2 :(得分:0)
你可以这样做,但我相信你不应该这样做。用户可以控制浏览器,如果她感觉更新,那么确保页面刷新是您的工作。返回错误页面是错误的答案。
答案 3 :(得分:-2)
您可以使用客户端隐藏变量来存储计数器,也可以将计数器放入会话中。好吧,我建议你在刷新页面到期时有办法可以实现这个禁用缓存等[像所有银行网站一样]。