[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Изменение статуса онлайн
Sektoid
Помогите плз
Есть код, который изменяет в базе данных статус пользователя на онлайн если он заходит.
mysql_query("UPDATE users SET online='1' WHERE email='".$email."'");

Но я не знаю как изменить статус на оффлайн если пользователь тупо закроет страницу.



Спустя 8 минут, 21 секунда (7.07.2011 - 00:36) waldicom написал(а):
Со 100% уверенностью никак. Можно отслеживать событие onunload. Можно посылать время от времени запрос с помощью javascript/ajax.
Но обычно делают так, что при любом действии пользователя выполняется запрос типа того, который стоит в Вашем посте. И считают время активности, например 5 минут после последнего действия - неактивный. Тогда и время неактивности никуда заносить не надо

Спустя 3 минуты, 25 секунд (7.07.2011 - 00:40) ewq001 написал(а):
Привет. Если я правильно понял, поле "online" тебе нужно для последующего отображения статуса на сайте.

В этом случае один из способов решения проблемы:

1. Делаешь поле online типа datetime и, при посещении пользователем какой-либо странички или логине, записываешь в это поле дату и время последнего захода пользователя на сайт.

2. Решаешь, через какое время "бездействия" пользователь считается ушедшим с сайта, допустим ты выбрал 10 минут.

3. При отображении информации о статусе пользователя на сайте, отображаешь "офлайн", если после последнего посещения уже прошло 10 минут и "онлайн", если 10 минут еще не прошли.
Подобная выборка делается запросом вроде " SELECT id FROM users WHERE email='".$email."' AND last_time > '".$current_time_minus_10."' " , где last_time - время последнего посещения, а current_time_minus_10 - текущее время, минус 10 минут. Соответственно, если БД вернет соответствующую запись - значит пользователь считается "онлайн".

Спустя 18 минут, 4 секунды (7.07.2011 - 00:58) tatti написал(а):
мне кажется лучше так:

1.поле online переименовать в status и заносить туда 0-офлайн / 1-онлайн / 2-бан .....и тп
2.при каждом действии юзера(там где проверяется куки) обновлять время истечения куки и сохранять нынешнее время в куки, которую в свою очередь сохранять в поле cookie в бд
3.при запросе информации о данном юзере выполняется проверка значения куки, сравниваеся с нынешним временем и при надобности меняется статус

Спустя 7 минут, 7 секунд (7.07.2011 - 01:05) waldicom написал(а):
Цитата (tatti @ 6.07.2011 - 22:58)
1.поле online переименовать в status и заносить туда 0-офлайн / 1-онлайн / 2-бан .....и тп

А юзер, который в бане не может быть онлайн? Да и если статусов прибавится, что делать?

Спустя 24 минуты, 42 секунды (7.07.2011 - 01:30) tatti написал(а):
waldicom
просто показываю, что поля status и cookie можно более гибко использовать.
в этом случае забаненый онлайн быть не может конечно. в куки в случае бана будет конец бана. хотя не настаиваю. это чисто мои полуночные(и не совсем трезвые) рассуждения

Спустя 2 часа, 45 минут, 39 секунд (7.07.2011 - 04:15) Sektodi написал(а):
спасибо, буду пробовать



Спустя 12 часов, 33 минуты, 21 секунда Sektoid написал(а):
Так правильно?
<BODY onUnLoad="javascript:window.alert('Спасибо, что нас посетили!');
<?php
mysql_query("UPDATE users SET online='0' WHERE email='".$_SESSION['user']."'");
?>">



Спустя 2 минуты, 23 секунды Sektoid написал(а):
ах да, забыл сказать
$_SESSION['user'] = $email
wink.gif



Спустя 14 часов, 36 минут, 18 секунд Sektoid написал(а):
Так, я понял почему это было не правильно.
Создал отдельную ексит.пхп, которая меняет статус.
Теперь надо просто создать еще одно окно при закрытии этого.

<BODY onUnload="window.open('website.ru/exit.php','_blank');">

Что неправильно?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.