如何在ASP.Net中跟踪F5 / Refresh

时间:2009-11-06 13:23:34

标签: asp.net-2.0

我正在使用VS 2005,C#2,ASP.Net 2.0

我无法找到如何跟踪该用户按下F5 / Ctrl + F5 /在ASP.Net中打开一个新窗口(Ctrl + N)。 我知道有一个Page.IsPostBack属性,它告诉我们加载一个页面以响应用户采取的操作。

我只是很想知道,为什么在ASP.Net中没有像IsRefresh或Page.IsRefresh这样的属性,它将返回true, 每当用户采取上述任何行动时。

有没有办法知道这个?

实际上我的问题是我有一个DLL,使用它来继承我的所有aspx页面,我必须这样做 每当第一次打开页面时,在表中插入一些值,如果用户只是打开页面或不采取任何操作, 应该在数据库中插入一个条目,但据我所知,我无论如何使用Page.IsPostBack属性控制它,但是我被卡住了 在刷新案例中,因为它无条件地插入记录。

8 个答案:

答案 0 :(得分:3)

与在Global.asax中使用函数类似(正如其他人建议的那样),您可以使用会话变量“flag”。当页面首次加载时,设置一个会话变量,然后在页面加载函数中检查它:

if (Session("visited") != "true"
   //page has not been visited, log visit to DB

请确保在页面加载期间的上述检查后的某个时间设置会话标记。

它不准确(会话可以在页面处于活动状态时超时,用户可以完全离开网站并返回相同的浏览器并且会话保持活动状态等)但是对于您的跟踪,它比计数要好得多每个页面都在DB中。

答案 1 :(得分:2)

也许您想要Global.asax文件中的Session_Start方法,该方法将在每个用户会话开始时触发一次?

Global.asax文件中,添加或修改方法:

void Session_Start(object sender, EventArgs e) 
{
}

答案 2 :(得分:1)

  

为什么ASP.Net中没有IsRefresh或Page.IsRefresh属性

因为ASP.NET不可能知道。浏览器不会发送任何可能允许其确定是否由于刷新或正常加载而请求页面的信息。您需要重新考虑您的要求:数据库日志记录的实际目的是什么?

答案 3 :(得分:1)

每次启动浏览器会话时都会触发Global.asax文件中的Session_Start方法。您可以使用此方法计算网站上唯一身份用户的数量。

会话结束时(显式或超时)触发Global.asax中的Session_End方法。所以你可以在这里减少计数。

希望以上示例使用这些方法可以帮助您了解如何使用它们。

答案 4 :(得分:1)

由于HTTP协议的无状态特性,无法区分刷新的初始负载

答案 5 :(得分:1)

正如已经说过的那样。这是不可能的。由于刷新而发出的请求与第一次加载页面时发出的请求没有区别。

听起来我觉得你试图以某种方式跟踪页面浏览量。这当然是可能的,虽然它需要你做一些工作。您最好的选择可能是记录页面的URL。您可能还希望包含查询字符串,以区分不同数据片段的页面加载(如果在您的应用程序中发生这种情况)。您还需要记录当前用户的ID以及会话的ID。

然后,您可以确保不在同一会话中为同一页面插入同一用户的两个页面浏览量,从而有效地过滤掉页面的任何重新加载。

您需要注意这与检测刷新不同,您检测的是同一会话中的两个页面视图,这可能是刷新,或者可以使用后退按钮,或者只是从地址栏重新加载。

答案 6 :(得分:1)

我的建议是在第一次加载时创建一个cookie,然后在Page_Load上检查cookie是否存在。如果是,请不要插入记录。如果适用于您的应用程序的体系结构,您可以使用Session_End来销毁或创建cookie。

答案 7 :(得分:0)

您可以使用此链接中提供的解决方案。根据您的要求稍微修改一下: Track page refresh