如何知道特定用户在特定会话中访问了多少页面


how to know how many pages a particular user visited in a particular session

我在一个电子商务网站工作,我想监控一个用户在一个特定的会话访问了多少页。该网站只有注册用户。有人能告诉我如何记录特定会话的用户URL吗?我正在使用PHP和mysql

在应用程序的某个点,您可以简单地执行:

$_SESSION['history'][] = $_SERVER['REQUEST_URI'];

从而将当前URI附加到会话的history数组。您可以使用更直观的方法,例如检查URI是否已经存在,计算页面之间的时差以进行报告,等等。

有多种方法可以做到这一点。下面是一个快速演练:

    创建两个字段('session_id', 'url')的表;
  1. 每当站点加载时,使用session_id()读取sessionid,并使用此值将页面的url存储在人们访问的每个页面的表中。

  2. 一旦页面加载,通过$_SERVER['REQUEST_URI'];读取URL,然后使用session_id()的值并存储记录

在您实现这个简单的技术之后。您可以使用一个简单的查询

查看有多少人浏览了这些页面。
SELECT count(*) FROM <YOURSESSIONTABLE> GROUP BY `<session_id_field>`

<子>注:这是一个基本示例,应该进行修改以满足您的需求

创建一个mysql表

UserID    SessionID     URI
1         XYZ           /
1         XYZ           /contact
1         ZYX           /contact

每个页面加载insert this到表

$query = "INSERT IGNORE INTO visits  (`UserID`, `SessionID`, `Uri`)
  VALUES ($userID, " . session_id() . ", " . mysql_real_escape_string(['REQUEST_URI']) . ")";

之后,您可以检查一个用户的会话,并使用

计算所有不同的页面。
SELECT COUNT(URI) FROM visits WHERE UserID = $userID GROUP BY SessionID

您还可以将日期时间与会话关联

我创建了一个由System.Web.UI.Page继承的基类,如

 public class BasePage : System.Web.UI.Page
{
    protected virtual void Page_Load(object sender, EventArgs e)
    {
    }
}

注意:使基类页面加载事件虚拟和其他页面页面加载事件重写,然后调用基类页面加载事件在每个页面页面加载事件,如

base.Page_Load(sender, e);

每个页面都通过这个基类继承,比如

protected override void Page_Load(object sender, EventArgs e)
    {
        base.Page_Load(sender, e);
    }

我是这样做的

        string pageName = Path.GetFileName(Request.PhysicalPath);
        string serverName = HttpContext.Current.Server.MachineName;
        string sessionId = HttpContext.Current.Session.SessionID;
        string ipAddress = HttpContext.Current.Request.UserHostAddress;

然后通过SQL或LINQ查询将这些值插入到数据库中…

通过LINQ插入

VisitorInformation vPanel = new VisitorInformation()
        {
            PageName = Path.GetFileName(HttpContext.Current.Request.PhysicalPath),
            ServerName = HttpContext.Current.Server.MachineName,
            SessionId = HttpContext.Current.Session.SessionID,
            IPAddress = HttpContext.Current.Request.UserHostAddress,
            VisitorDate = Convert.ToDateTime(System.DateTime.Now.ToString()),
        };
        new BaseDAL().AddVisitorInfo(vPanel);