как узнать, сколько страниц посетил конкретный пользователь за конкретный сеанс - PullRequest
1 голос
/ 29 декабря 2011

Я работаю над сайтом электронной коммерции, я хочу отслеживать, сколько страниц посетили пользователи за конкретный сеанс. Есть только зарегистрированные пользователи сайта. Может ли кто-нибудь сказать мне, как записать URL-адрес пользователя конкретного сеанса, я использую php и mysql

Ответы [ 4 ]

2 голосов
/ 29 декабря 2011

В какой-то момент в приложении вы можете просто выполнить:

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

Таким образом добавляя текущий URI к массиву history сеанса. Вы могли бы стать более интуитивным, например, проверить, существует ли уже URI, вычислить разницу во времени между страницами для целей отчетности и т. Д.

1 голос
/ 29 декабря 2011

Есть несколько способов сделать это.Вот краткий обзор:

  1. Создать таблицу с двумя полями ('session_id', 'url');

  2. Всякий раз, когда сайт загружаетсяпрочитайте sessionid, используя session_id(), и используйте это значение, чтобы сохранить URL страницы в таблице для каждой страницы, которую посещают люди.

  3. После загрузки страницы прочитайте URLчерез $_SERVER['REQUEST_URI'];, а затем используйте его значение session_id() и сохраните записи.

После того, как вы реализуете эту простую технику.Вы можете увидеть, сколько людей видят страницы, используя простой запрос

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

PS Это один из базовых примеров, и его следует изменить в соответствии с вашими требованиями

0 голосов
/ 12 августа 2014

Я создал базовый класс, который наследуется 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);
0 голосов
/ 29 декабря 2011

Наличие таблицы 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

вы также можете связать дату и время с сеансом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...