我正在创建一个 asp.net 网站,我想实现一个几乎准确的计数器。据我了解,基于 SessionStart 的在线解决方案不是很准确,所以我想也许我可以在用户机器上放置一个 cookie,并在每个 SessionStart 上检查该 cookie 的存在,如果存在则不计算该请求,否则将一个添加到 Cache["hits"] 并在目标机器上创建一个新的命中 cookie。可以这样吗?
public void Session_Start(object sender, EventArgs e)
{
HttpCookie cookie = Request.Cookies.Get("hitCookie");
if(cookie == null)
{
object hitsObj = Cache["hits"];
if(hitsObj != null)
{
int hits = Convert.ToInt32(hitsObj);
Cache["hits"] = hits + 1;
cookie = new HttpCookie("hitCookie");
Response.Cookies.Add(cookie);
}
}
}
如果您认为 cookie 可能在用户计算机上被禁用,请记住默认情况下 asp.net 成员资格也不会起作用。
更新: cookies 比其他计算访问者而不是您网站成员的方法更可靠,是的,您可以删除它们,我认为这样计算用户两次就可以了。至少我没有计算任何启动新会话的机器人或爬虫。