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

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

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

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

Подскажите одно: как мне в момент "покидания" поймать этот момент, и в этот момент сделать запись в БД, и где в переменную, например $exit, приравнять время проведенное на сайте.
...
Рейтинг: 0 / 0
Сколько времени пользователь провел на сайте
    #38850365
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем случае никак.
В случае одностраничного сайта открывать соединение через вебсокет и ловить на сервере факт его разрыва.
...
Рейтинг: 0 / 0
Сколько времени пользователь провел на сайте
    #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
Сколько времени пользователь провел на сайте
    #38850383
Фотография Алексей Смирнов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.: а переменной $exit как раз в файле 'savetime.php' и приравняете значение времени.
Единственное, что эту переменную $exit никто потом не увидит.

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

Пример можно?
...
Рейтинг: 0 / 0
Сколько времени пользователь провел на сайте
    #38850541
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для примера нужен сервер с поддержкой websocket.
в спецификации ws есть обработка ошибок - и в ней есть коды причины "обрыва связи".
для данной задачи достаточно простой подключения по ws - время открытия страницы
переход по ссылке - либо отлавливать это событие(либо есть в ws код на это -не помню) - закрывать ws с пользовательским кодом.
...
Рейтинг: 0 / 0
Сколько времени пользователь провел на сайте
    #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
Сколько времени пользователь провел на сайте
    #38850553
Фотография Алексей Смирнов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадядля примера нужен сервер с поддержкой websocket.

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

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

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

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

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

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

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

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

...я имею в виду сервер с поддержкой WS ... для IIS 7.5 - это возможно?
...
Рейтинг: 0 / 0
Сколько времени пользователь провел на сайте
    #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
Сколько времени пользователь провел на сайте
    #38850808
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но мы можем пойти по пути self-hosted application + Fleck
...
Рейтинг: 0 / 0
Сколько времени пользователь провел на сайте
    #38850848
Фотография Алексей Смирнов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНо мы можем пойти по пути self-hosted application + Fleck

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

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

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

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

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

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

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

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


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