Как отслеживать время пользователя на сайте

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

Aspose.Cells.LoadOptions loadOptions = new Aspose.Cells.LoadOptions(Aspose.Cells.LoadFormat.CSV);

Workbook workbook = new Workbook(fstream, loadOptions);

Worksheet worksheet = workbook.Worksheets[0];

dt = worksheet.Cells.ExportDataTable(0, 0, worksheet.Cells.MaxDisplayRange.RowCount, worksheet.Cells.MaxDisplayRange.ColumnCount, true);

DataTable dtCloned = dt.Clone();
ArrayList myAL = new ArrayList();

foreach (DataColumn column in dtCloned.Columns)
{
    if (column.DataType == Type.GetType("System.DateTime"))
    {
        column.DataType = typeof(String);
        myAL.Add(column.ColumnName);
    }
}


foreach (DataRow row in dt.Rows)
{
    dtCloned.ImportRow(row);
}



foreach (string colName in myAL)
{
    dtCloned.Columns[colName].Convert(val => DateTime.Parse(Convert.ToString(val)).ToString("MMMM dd, yyyy"));
}


/*******************************/

public static class MyExtension
{
    public static void Convert<T>(this DataColumn column, Func<object, T> conversion)
    {
        foreach (DataRow row in column.Table.Rows)
        {
            row[column] = conversion(row[column]);
        }
    }
}

Надеюсь, это поможет some1 thx_joxin

16
задан Yi Jiang 20 August 2010 в 21:25
поделиться

3 ответа

Вы можете получить время следующими способами:

  1. После того, как пользователь зайдет на ваш сайт, сохраните текущее время в файле cookie как «посещено», и при следующем посещении вы сможете получить его, если оно было установлено.
  2. И более дорогой метод: когда страница загружается, запускайте таймер js, а при выгрузке страницы отправьте на сервер время, которое отправил пользователь, и сохраните его в БД.
  3. А если в Опере не работает window.unload, то можно каждые 5 секунд отправлять время на сервер и сохранять его в БД.

Если нужно, могу написать пример скрипта.

ОБНОВЛЕНИЕ:

<!DOCTYPE html>
<html>
    <head>
        <title>Collect time</title>
        <script type="text/javascript" src="jquery-1.4.2.min.js"></script>
        <script type="text/javascript">
        $(function()
        {
            var start = null;
            $(window).load(function(event) {
                start = event.timeStamp;
            });
            $(window).unload(function(event) {
                var time = event.timeStamp - start;
                $.post('/collect-user-time/ajax-backend.php', {time: time});
            })
        });
        </script>
    </head>
    <body>

    </body>
</html>

И внутренний скрипт:

<?php 
$time = intval($_POST['time']);
if (!file_exists('data.txt')) {
    file_put_contents('data.txt', $time . "\n");
} else {
    file_put_contents('data.txt', $time . "\n", FILE_APPEND);
}

Но, как я уже сказал, он не будет работать в браузере Opera

22
ответ дан 30 November 2019 в 12:43
поделиться

На самом деле нет эффективного способа сделать это с помощью PHP, поскольку PHP является серверным и не дает возможности определить, когда страница была закрыта. Чтобы определить это, вам нужно использовать javascript.

Я бы использовал javascript, чтобы запустить таймер на window.onload , а затем завершить таймер на window.onunload . Затем вы можете хранить данные и делать с ними все, что хотите.

2
ответ дан 30 November 2019 в 12:43
поделиться

Основной способ, который я могу придумать:

Когда пользователь впервые открывает страницу, вы регистрируете, скажем, его IP-адрес, загруженную страницу и время.Затем, используя некоторые Javascript и AJAX, когда они покидают страницу, вы используете событие unload для отправки обработчику AJAX, который записывает страницу и когда они уходят.

Вам нужно будет использовать какой-то идентификатор, помимо сеанса, для сохранения посещения страницы. Скажем, у меня открыто 5 экземпляров домашней страницы, вы хотите зарегистрировать каждый из них по отдельности. Итак, что-то вроде этого:

  1. Откройте страницу, сгенерируйте код (скажем, page: index.php code: 2345)
  2. Сохраните это в таблице базы данных с помощью их IP и время посещения
  3. Выгрузите событие, вызовите AJAX, передавайте страницу и код
  4. Поищите в БД IP, страницу и код и зарегистрируйте время выхода

Если они посещают index.php, вы должны сгенерировать другой код, скажем, 36789. Лучше всего использовать что-то, что генерирует случайный GUID, поэтому вы можете (по существу) игнорировать любые возможности коллизий в одной и той же комбинации IP/страницы/кода.

5
ответ дан 30 November 2019 в 12:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: