【发布时间】:2011-01-25 20:21:04
【问题描述】:
我有一个索引页面,它将用户发送到不同浏览器选项卡上的编辑产品页面。
对于每个编辑的产品,索引都会重写 Session["ProductID"]。
然后编辑页面具有以下代码,以便为该选项卡和产品提供唯一标识符:
if (!IsPostBack) //first time page load
{
Random R = new Random(DateTime.Now.Millisecond + DateTime.Now.Second * 1000 + DateTime.Now.Minute * 60000 + DateTime.Now.Minute * 3600000);
PageID.Value = R.Next().ToString();
Session[PageID.Value + "ProductID"] = Session["ProductID"];
}
这可行,当同一个用户打开多个选项卡时,我只在我的代码中引用 Session[PageID.Value + "ProductID"] 以便我始终拥有正确的 ID。 (我在受信任的环境中工作,这是针对 Intranet 的,因此我对安全级别不太在意)。
如果用户通过按 F5 键刷新页面,就会出现我的问题。此时 Session[PageID.Value + "ProductID"] 获取他打开的最后一个产品的 Session["ProductID"]。
例如:
用户1在tab1中打开product1
用户1在tab2中打开product2
每当他们正常使用该工具时,一切正常。但是如果:
product1页面上的用户1点击刷新按钮(F5)product1页面变成product2页面
有没有办法从“第一次加载/从另一个页面重定向”检测页面刷新,以便我可以告诉我的页面不要更新我的 Session[PageID.Value + "ProductID"]?
【问题讨论】:
-
值得快速测试一下Request.Headers["HttpReferer"]的存在是否有效。
-
我尝试了 Request.UrlReferrer.ToString() ,当我第一次加载页面时,我将索引页面作为引荐来源。不幸的是,如果我用 F5 刷新页面,我仍然会得到索引页面。推荐人更改的唯一方法是,如果我在编辑页面上进行回发,那么推荐人将成为编辑页面。