ASP.NET 以前访问过页面?
ASP.NET Page already visited ever before?
ASP.NET中是否有一种机制可以检测页面是否曾经被访问过?
(不存储到数据库或应用程序对象)
我是 运行 IIS 上的站点。
localhost/page?a=1&b=2 - not visited
localhost/page?a=1&b=3 - not visited
localhost/page?a=1&b=2 - already visited!
P.S。检测应该是是否有人访问过它。假设在查询字符串中生成了一些哈希:
localhost/page?a=83abd83de6514ba0a0e5ce620eb1d43e
我需要检查该哈希值是否已被“使用”。
怎么样?对我来说,最简单的方法(不存储到数据库中)是找出是否打开过带有此查询字符串的页面。
实现此目的的几种方法:
- 如果你的IIS启用了访问日志,你可以分析它的访问日志
- 如果你在IIS之前有一个服务网关,你可以分析它的访问日志
- 如果你在IIS之前有一个nginx,你可以分析它的访问日志
- 如果你在IIS之前有一个F5,你可以分析它的访问日志
- 如果你的应用在云端,你可以分析它的访问日志
- 如果这些日志没有足够的信息,你最好实现自己的日志class
- 你也可以尝试在redis中记录这些url(K-V,或hyper-log-log,或bloom-filter,取决于你想做什么)
是的,您可以在“~/App_Data/”中创建文件,然后检查文件是否存在。
您的代码如下所示:
protected void Page_Load(object sender, EventArgs e)
{
var message = "not visited";
var chk = Guid.TryParse(Page.Request.QueryString["a"], out var guid);
var hash = chk ? guid.ToString("N").ToUpper() :
BitConverter.ToString(MD5.Create()
.ComputeHash(Encoding.UTF8.GetBytes(Request.RawUrl)))
.Replace("-", string.Empty);
var path = HttpContext.Current.Server.MapPath("~/App_Data/" + hash);
if (File.Exists(path))
message = "already visited!";
else if (!chk)
File.WriteAllText(path, string.Empty);
Label1.Text = message;
}
PS 对于网站中的任何页面,在 Global.asax
中的 Application_BeginRequest 事件中放入类似代码
ASP.NET中是否有一种机制可以检测页面是否曾经被访问过? (不存储到数据库或应用程序对象) 我是 运行 IIS 上的站点。
localhost/page?a=1&b=2 - not visited
localhost/page?a=1&b=3 - not visited
localhost/page?a=1&b=2 - already visited!
P.S。检测应该是是否有人访问过它。假设在查询字符串中生成了一些哈希:
localhost/page?a=83abd83de6514ba0a0e5ce620eb1d43e
我需要检查该哈希值是否已被“使用”。
怎么样?对我来说,最简单的方法(不存储到数据库中)是找出是否打开过带有此查询字符串的页面。
实现此目的的几种方法:
- 如果你的IIS启用了访问日志,你可以分析它的访问日志
- 如果你在IIS之前有一个服务网关,你可以分析它的访问日志
- 如果你在IIS之前有一个nginx,你可以分析它的访问日志
- 如果你在IIS之前有一个F5,你可以分析它的访问日志
- 如果你的应用在云端,你可以分析它的访问日志
- 如果这些日志没有足够的信息,你最好实现自己的日志class
- 你也可以尝试在redis中记录这些url(K-V,或hyper-log-log,或bloom-filter,取决于你想做什么)
是的,您可以在“~/App_Data/”中创建文件,然后检查文件是否存在。
您的代码如下所示:
protected void Page_Load(object sender, EventArgs e)
{
var message = "not visited";
var chk = Guid.TryParse(Page.Request.QueryString["a"], out var guid);
var hash = chk ? guid.ToString("N").ToUpper() :
BitConverter.ToString(MD5.Create()
.ComputeHash(Encoding.UTF8.GetBytes(Request.RawUrl)))
.Replace("-", string.Empty);
var path = HttpContext.Current.Server.MapPath("~/App_Data/" + hash);
if (File.Exists(path))
message = "already visited!";
else if (!chk)
File.WriteAllText(path, string.Empty);
Label1.Text = message;
}
PS 对于网站中的任何页面,在 Global.asax
中的 Application_BeginRequest 事件中放入类似代码