Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Организация online - offline пользователей
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Организация online - offline пользователей

Страниц (1): [1]
 

1. eramar - 08 Августа, 2011 - 11:19:15 - перейти к сообщению
в таблице profile есть поле user_status . При залогинивании я делаю:
mysql_query( " update profile set user_status='Online' where user_email='".$_POST['email']."' and user_password='".$_POST['password']."' ");

При разлогинивании : mysql_query( " update profile set user_status='Offline' where user_id='$id' ");

Скажите, пожалуйста, если человек использует кнопку "запомнить меня" (использую кукисы), закрывает сайт , не нажимая выход. Как поставить его статус в оффлайн, когда его нет на сайте ?
2. Uchkuma - 08 Августа, 2011 - 12:00:57 - перейти к сообщению
Как вариант, при каждой активности юзера записывать временную метку этой самой активности. Далее, считать юзера онлайн, если он был активен, скажем, не более 10 минут назад. Иначе - оффлайн.
3. Craken - 09 Августа, 2011 - 04:14:55 - перейти к сообщению
Как вариант Вам можно создать поле в БД со временем последней активности!
ALTER TABLE `profile` ADD `last_active_time` int(11)

Когда пользователь логинится, добавить в запрос:
mysql_query( " update profile set user_status='Online', last_active_time = UNIX_TIMESTAMP() where user_email='".$_POST['email']."' and user_password='".$_POST['password']."' ");

Ну а там где вызов количества юзеров в онлайне, добавить в условие "AND last_active_time > (UNIX_TIMESTAMP()-тут количество секунд)"

Конечно в таком случае при каждом действии юзера придется обновлять запись в БД:
mysql_query("UPDATE profile SET last_active_time = UNIX_TIMESTAMP() WHERE тут словия идентификации юзера");
4. DeepVarvar - 09 Августа, 2011 - 08:03:35 - перейти к сообщению
Craken пишет:
Как вариант
добавьте еще слово "единственный".
Конечно можно организовать это и иным способом, через подсчет количества файлов сессии, в директории установленной руками.
Но по мне так лучше и менее напряжно по ресурсам обратиться к БД которая оптимизирована и даже кеширует данные.
5. Uchkuma - 09 Августа, 2011 - 08:55:22 - перейти к сообщению
DeepVarvar пишет:
Конечно можно организовать это и иным способом, через подсчет количества файлов сессии
У меня это вовсе решено собственным механизмом сессий, организованных в БД.
6. illy - 09 Августа, 2011 - 09:07:40 - перейти к сообщению
Файл online.txt имеет вид: ник|время|

При переходе на любую страницу в файле online.txt ищется ник юзера.
Если найден, то заменить его время на time()+600.
Если не найден, то добавить ник|time()+600|
Попутно проверять нет ли ников с временем>time().
Если есть то удалить.

Ну а потом выводишь список онлайн:

$la=file('online.txt');
$c=count($la);
for($n=0;$n<$c;$n++){
$u=explode('|',$la[$n]);
echo u[0].'<br>';
}
7. SAD - 09 Августа, 2011 - 09:14:39 - перейти к сообщению
зачем это извращение с файлами?
8. illy - 09 Августа, 2011 - 09:22:41 - перейти к сообщению
SAD пишет:
зачем это извращение с файлами?

Потому что не пользуюсь Mysql Ха-ха
9. eramar - 09 Августа, 2011 - 09:32:25 - перейти к сообщению
мне не нужен список онлайн пользователей, просто делаю сайт наподобие соц сети с профилями пользователей , у которых на профиле отображается "онлайн" , если они на сайте. Спасибо за варианты решений!
10. DeepVarvar - 09 Августа, 2011 - 12:37:39 - перейти к сообщению
illy пишет:
Потому что не пользуюсь Mysql
Страшно?
11. White - 09 Августа, 2011 - 13:10:04 - перейти к сообщению
illy пишет:
Потому что не пользуюсь Mysql
религия не позволяет?
12. illy - 09 Августа, 2011 - 15:17:12 - перейти к сообщению
White пишет:
религия не позволяет?

пока не т необходимости в Mysql
13. prog90 - 17 Августа, 2011 - 18:42:49 - перейти к сообщению
А может можно попробовать установить javascript код, который будет через ajax каждый пять минут отправлять сигнал на сервер в скрипт например, check_online.php, и если после пяти минут не поступило сигнала то значит браузер был закрыт или страница с javascript-кодом. А чтобы это было более интерактивным, то поставить частоту сигнала на 1 минуту, например.
Может быть такое пройдет.

 

Powered by ExBB FM 1.0 RC1