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

时间:2011-12-29 10:34:50

标签: php mysql session url

我正在开发电子商务网站,我想监控用户在特定会话中访问了多少页面。只有该网站的注册用户。  任何人都可以告诉我如何记录特定会话的用户的URL, 我正在使用php和mysql

4 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

  1. 创建一个包含两个字段的表('session_id','url');

  2. 每当网站加载时,请使用session_id()读取sessionid,并使用此值将页面的网址存储在人们访问的每个网页的表格中。

  3. 加载页面后,通过$_SERVER['REQUEST_URI'];读取网址,然后使用session_id()的值并存储记录。

  4. 实施这个简单的技术后。你可以看到有多少人使用一个简单的查询来查看页面

    SELECT count(*) FROM <YOURSESSIONTABLE> GROUP BY `<session_id_field>`
    

    <子> P.S。这是基本示例之一,应根据您的要求进行更改

答案 2 :(得分:0)

有一个mysql表

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

每个加载的页面都将其插入表格

$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

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

答案 3 :(得分:0)

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

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

注意:make基类页面加载事件虚拟页面和其他页面页面加载事件覆盖,然后在每个页面加载事件中调用基类页面加载事件,如

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);