Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Сколько времени пользователь провел на сайте / 25 сообщений из 25, страница 1 из 1
08.01.2015, 17:58
    #38850311
Сколько времени пользователь провел на сайте
Добрый вечер!
Подобной темы в форуме не обнаружил.
Очень нужно сдать контрольную работу. Сайт сделал, счетчик реализовал, а с JS совсем не бум-бум.

Задача такая:
Нужно знать сколько времени пользователь провел на странице. Т.е. открыл страницу, и знать когда закрыл или перешел с нее.

На других форумах пишут, что JS поможет, но на изучение уже цейтнот.
Буду очень благодарен, если пришлете готовый код. Спасибо!
...
Рейтинг: 0 / 0
08.01.2015, 18:15
    #38850319
Алексей Смирнов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько времени пользователь провел на сайте
...
Рейтинг: 0 / 0
08.01.2015, 19:06
    #38850360
Сколько времени пользователь провел на сайте
Алексей Смирнов,

я видел эту страничку, и этот код.

Подскажите одно: как мне в момент "покидания" поймать этот момент, и в этот момент сделать запись в БД, и где в переменную, например $exit, приравнять время проведенное на сайте.
...
Рейтинг: 0 / 0
08.01.2015, 19:09
    #38850365
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько времени пользователь провел на сайте
В общем случае никак.
В случае одностраничного сайта открывать соединение через вебсокет и ловить на сервере факт его разрыва.
...
Рейтинг: 0 / 0
08.01.2015, 19:39
    #38850381
Алексей Смирнов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько времени пользователь провел на сайте
Артем ЛаповАлексей Смирнов,

я видел эту страничку, и этот код.

Подскажите одно: как мне в момент "покидания" поймать этот момент, и в этот момент сделать запись в БД, и где в переменную, например $exit, приравнять время проведенное на сайте.

Момент покидания рекомендую заменить на какой-нибудь другой. Т.к. пользователь может просто выключить комп и ничего не запишется. Лучше всего в базу писать каждую секунду с помощью асинхронных запросов XMLHTTPRequest

Например вставить в функцию getSecs:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
function getSecs() {
  var tSecs = Math.round(initStopwatch());
  var iSecs = tSecs % 60;
  var iMins = Math.round((tSecs-30)/60);
  var sSecs ="" + ((iSecs > 9) ? iSecs : "0" + iSecs);
  var sMins ="" + ((iMins > 9) ? iMins : "0" + iMins);
  document.getElementById("timer-counter").innerHTML = sMins+":"+sSecs;
  setTimeout('getSecs()', 1000);
  // тут делаем асинхронный запрос
  SendRequest('post','savetime.php','intMin='+sMins+'&intSec='+sSecs,null);		
}



Запись в базу производится в файле 'savetime.php':
Код: php
1.
2.
3.
<?php
// записать в базу полученные POST-параметры $_POST['intMin'], $_POST['intSec']
?>



Ещё нужно на основной странице добавить между тегами <head></head> функции для работы с запросами:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
// ФУНКЦИЯ: создание объекта
function CreateRequest() {
    var Request = false;
    if (window.XMLHttpRequest) {
        Request = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        //Internet explorer
        try {
             Request = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (CatchException) {
             Request = new ActiveXObject("Msxml2.XMLHTTP");
        }
    }
    if (!Request) alert("Невозможно создать XMLHttpRequest");
    return Request;
} 

// ФУНКЦИЯ: выполнение запроса к файлу на сервере
// r_method  - тип запроса: GET или POST
// r_path    - путь к файлу
// r_args    - аргументы вида a=1&b=2&c=3...
// r_handler - функция-обработчик ответа от сервера
function SendRequest(r_method, r_path, r_args, r_handler) {
    // создание объекта запроса
    var Request = CreateRequest();
    // выход, если объект не создан
    if (!Request) return;
    // назначение пользовательской функции
    Request.onreadystatechange = function() {
        // если обмен данными выполнен
        if (Request.readyState == 4)
            // передача управления обработчику
            r_handler(Request);
    }
    // проверка, если требуется сделать GET-запрос
    if (r_method.toLowerCase() == "get" && r_args.length > 0) r_path += "?" + r_args;
    // инициализация соединения
    Request.open(r_method, r_path, false);
    // выполнение запроса
    if (r_method.toLowerCase() == "post") { // если POST-запрос
        // установка заголовка
        Request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8");
        // отправка запроса
        Request.send(r_args);
    } else { // если GET-запрос
		// отправка запроса без POST-аргументов
		Request.send(null);
    }
} 

</script>
...
Рейтинг: 0 / 0
08.01.2015, 19:43
    #38850383
Алексей Смирнов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько времени пользователь провел на сайте
P.S.: а переменной $exit как раз в файле 'savetime.php' и приравняете значение времени.
Единственное, что эту переменную $exit никто потом не увидит.

Поэтому 2 варианта:
1) заменить её например на переменную сессии $_SESSION['exit'];
2) или вернуть с помощью оператора echo $exit; через callback-функцию обратно в код главной страницы.
...
Рейтинг: 0 / 0
08.01.2015, 22:38
    #38850500
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько времени пользователь провел на сайте
это всё прекрасно реализуется с использованием websocket...
...
Рейтинг: 0 / 0
09.01.2015, 00:06
    #38850539
Алексей Смирнов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько времени пользователь провел на сайте
вадяэто всё прекрасно реализуется с использованием websocket...

Пример можно?
...
Рейтинг: 0 / 0
09.01.2015, 00:17
    #38850541
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько времени пользователь провел на сайте
для примера нужен сервер с поддержкой websocket.
в спецификации ws есть обработка ошибок - и в ней есть коды причины "обрыва связи".
для данной задачи достаточно простой подключения по ws - время открытия страницы
переход по ссылке - либо отлавливать это событие(либо есть в ws код на это -не помню) - закрывать ws с пользовательским кодом.
...
Рейтинг: 0 / 0
09.01.2015, 00:43
    #38850550
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько времени пользователь провел на сайте
http://learn.javascript.ru/websockets#чистое-закрытие
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Чистое закрытие

При закрытии соединения сторона, желающая это сделать (обе стороны в WebSocket равноправны) отправляет закрывающий фрейм (опкод 0x8), в теле которого указывает причину закрытия.

В браузерной реализации эта причина будет содержаться в свойстве reason события onclose.

Наличие такого фрейма позволяет отличить «чистое закрытие» от обрыва связи.

В браузерной реализации событие onclose при чистом закрытии имеет event.wasClean = true.
Коды закрытия

Коды закрытия event.code, чтобы не путать их с HTTP-кодами, состоят из 4 цифр:

1000
    Нормальное закрытие.
1001
    Удалённая сторона «исчезла». Например, процесс сервера убит или браузер перешёл на другую страницу.
1002
    Удалённая сторона завершила соединение в связи с ошибкой протокола.
1003
    Удалённая сторона завершила соединение в связи с тем, что она получила данные, которые не может принять. Например, сторона, которая понимает только текстовые данные, может закрыть соединение с таким кодом, если приняла бинарное сообщение. 
...
Рейтинг: 0 / 0
09.01.2015, 00:49
    #38850553
Алексей Смирнов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько времени пользователь провел на сайте
вадядля примера нужен сервер с поддержкой websocket.

Ну вот видите, у вас сразу проблемы начинаются.

Я привел пример (причем исходный код - как просил автор) на чистом PHP+Java без всяких примочек.

От вас я примера кода не увидел. Ещё не известно, какие сложности у вас в коде появятся.
...
Рейтинг: 0 / 0
09.01.2015, 00:53
    #38850556
Алексей Смирнов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько времени пользователь провел на сайте
вадя http://learn.javascript.ru/websockets#чистое-закрытие
Код: plaintext
1.
2.
Чистое закрытие
При закрытии соединения сторона, желающая это сделать (обе стороны в WebSocket равноправны) отправляет закрывающий фрейм (опкод 0x8), в теле которого указывает причину закрытия.

А так вообще вещь интересная конечно. Если использовать для серьезного проекта, а не для учебных задачек.
...
Рейтинг: 0 / 0
09.01.2015, 01:06
    #38850561
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько времени пользователь провел на сайте
Алексей СмирновА так вообще вещь интересная конечно. Если использовать для серьезного проекта, а не для учебных задачек.
использую и наслаждаюсь..
...
Рейтинг: 0 / 0
09.01.2015, 12:01
    #38850650
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько времени пользователь провел на сайте
вадяАлексей СмирновА так вообще вещь интересная конечно. Если использовать для серьезного проекта, а не для учебных задачек.
использую и наслаждаюсь..тем, что не надо поддерживать старые браузеры
...
Рейтинг: 0 / 0
09.01.2015, 12:34
    #38850672
carrotik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько времени пользователь провел на сайте
skyANAтем, что не надо поддерживать старые браузеры

...я правильно понимаю, что в цивилизации ASP.NET это можно только с IIS 8.0 .. ?
...
Рейтинг: 0 / 0
09.01.2015, 14:24
    #38850783
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько времени пользователь провел на сайте
carrotikskyANAтем, что не надо поддерживать старые браузеры

...я правильно понимаю, что в цивилизации ASP.NET это можно только с IIS 8.0 .. ?что можно? :)

http://caniuse.com/#feat=websockets
...
Рейтинг: 0 / 0
09.01.2015, 14:30
    #38850794
carrotik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько времени пользователь провел на сайте
skyANAчто можно? :)

http://caniuse.com/#feat=websockets

...я имею в виду сервер с поддержкой WS ... для IIS 7.5 - это возможно?
...
Рейтинг: 0 / 0
09.01.2015, 14:36
    #38850800
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько времени пользователь провел на сайте
carrotikskyANAчто можно? :)

http://caniuse.com/#feat=websockets

...я имею в виду сервер с поддержкой WS ... для IIS 7.5 - это возможно?нет

http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-websocket-protocol-support
...
Рейтинг: 0 / 0
09.01.2015, 14:46
    #38850808
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько времени пользователь провел на сайте
Но мы можем пойти по пути self-hosted application + Fleck
...
Рейтинг: 0 / 0
09.01.2015, 15:33
    #38850848
Алексей Смирнов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько времени пользователь провел на сайте
skyANAНо мы можем пойти по пути self-hosted application + Fleck

А для PHP+Apache - это сложно?
...
Рейтинг: 0 / 0
09.01.2015, 15:42
    #38850853
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько времени пользователь провел на сайте
Алексей СмирновskyANAНо мы можем пойти по пути self-hosted application + Fleck

А для PHP+Apache - это сложно?Попробуйте phpwebsocket или посмотрите mod_websocket для Apache.
...
Рейтинг: 0 / 0
09.01.2015, 16:18
    #38850881
Алексей Смирнов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько времени пользователь провел на сайте
skyANAПопробуйте phpwebsocket или посмотрите mod_websocket для Apache.Спасибо за ссылку. Да в принципе не сложно. Нашёл простой пример тут: Поднимаем WebSocket сервер
...
Рейтинг: 0 / 0
09.01.2015, 16:18
    #38850882
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько времени пользователь провел на сайте
skyANAвадяпропущено...

использую и наслаждаюсь..тем, что не надо поддерживать старые браузеры

ну для старых есть эмуляция ws через флэш
...
Рейтинг: 0 / 0
09.01.2015, 16:21
    #38850888
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько времени пользователь провел на сайте
carrotikskyANAчто можно? :)

http://caniuse.com/#feat=websockets

...я имею в виду сервер с поддержкой WS ... для IIS 7.5 - это возможно?

ws нет, wss да
...
Рейтинг: 0 / 0
09.01.2015, 16:23
    #38850889
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько времени пользователь провел на сайте
вадяskyANAпропущено...
тем, что не надо поддерживать старые браузеры

ну для старых есть эмуляция ws через флэш
вот https://github.com/gimite/web-socket-js
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Сколько времени пользователь провел на сайте / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]