0

我正在尝试为我的网站创建一个计数器

我在网上查看了很多示例,但大多数都没有我正在寻找的正确形式。

例如,在我创建的大多数命中计数器上,我所做的只是按下刷新,命中就会上升。我不想要那个。我也尝试使用 .xml 文件,但无济于事。我只是按住 F5 键,然后我的命中率就上升了。所以我知道我需要使用数据库。我计划使用 MS Access 数据库,因为它很小(只有一个表),并且可以在发布时轻松放在网站上。

我对如何添加点击有一个大致的想法:

OleDbConnection conn = null;
OleDbDataReader reader = null;
try
{
    conn = new OleDbConnection(
    "Provider=Microsoft.Jet.OLEDB.4.0; " + 
    "Data Source=" + Server.MapPath("App_Data/TestDB.mdb"));
    conn.Open();

    OleDbCommand cmd = 
    new OleDbCommand("insert into Hits Values(" + hits + "", conn);
    cmd.ExecuteNonQuery();

}
catch (Exception e)
{
    Response.Write(e.Message);
    Response.End();
}

应该是这样的。它类似于我希望的 SQL。无论如何,我的问题是,当用户返回该页面(主页)时,命中计数器会增加。我听说过活动会话,并且想知道这是否是我应该使用的。如果这是正确的方法,我如何在我的网站上完全实施它?基本上,我怎样才能确保 Bob 登录并使用该站点,访问所有页面 5 次并且点击计数器只注册一次?这样当 Jane 登录该站点时,她会看到她是第二个(在 Bob 之后)查看该站点的人?

会不会是这样的:

Session["logged"] = "On";
if(Session["logged"].ToString().Equals("On");
{
    hits = 1;
    //add the data to database

}

从这里我迷路了。如果数据库可以避免使用 .xml 文件,那么活动会话是否仍然适用?最后,我必须关心cookies吗?

拜托,我知道谷歌分析提供免费服务,但我不想使用它们。我还需要学会自己开发这些东西。

谢谢

4

1 回答 1

0

如果数据库可以避免使用 .xml 文件,那么活动会话是否仍然适用?最后,我必须关心cookies吗?

使用会话变量来跟踪您是否计算了“命中”。您真正想要在这里跟踪的是访问次数,而不是“点击次数”或“页面加载次数”。

在 IIS 中,会话在客户端访问期间持续。有一些陷阱。如果客户端不支持 cookie,则每个页面加载最终都会成为不同的会话。您可以结合使用 IP 和 UserAgent 来检测何时发生这种情况,但这意味着您需要将其存储在数据库中,并在运行代码以计算“命中”时以某种方式对其进行检查。

您实际上并不需要使用 cookie 来完成这项工作,除非您希望能够匹配客户端会话以查看访问者是新访问者还是以前在某个时间点访问过您的站点。当我构建它时,我选择在客户端上存储一个唯一的“cookieid”,以便能够检测到重复访问者。

于 2013-11-15T02:43:10.370 回答