我在一个电子商务网站工作,我想监控一个用户在一个特定的会话访问了多少页。该网站只有注册用户。有人能告诉我如何记录特定会话的用户URL吗?我正在使用PHP和mysql
在应用程序的某个点,您可以简单地执行:
$_SESSION['history'][] = $_SERVER['REQUEST_URI'];
从而将当前URI附加到会话的history
数组。您可以使用更直观的方法,例如检查URI是否已经存在,计算页面之间的时差以进行报告,等等。
有多种方法可以做到这一点。下面是一个快速演练:
-
创建两个字段('session_id', 'url')的表;
每当站点加载时,使用
session_id()
读取sessionid,并使用此值将页面的url存储在人们访问的每个页面的表中。一旦页面加载,通过
$_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);