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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Организация online - offline пользователей

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
eramar
Отправлено: 08 Августа, 2011 - 11:19:15
Post Id


Новичок


Покинул форум
Сообщений всего: 57
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




в таблице 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' ");

Скажите, пожалуйста, если человек использует кнопку "запомнить меня" (использую кукисы), закрывает сайт , не нажимая выход. Как поставить его статус в оффлайн, когда его нет на сайте ?
 
 Top
Uchkuma
Отправлено: 08 Августа, 2011 - 12:00:57
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




Как вариант, при каждой активности юзера записывать временную метку этой самой активности. Далее, считать юзера онлайн, если он был активен, скажем, не более 10 минут назад. Иначе - оффлайн.
 
 Top
Craken
Отправлено: 09 Августа, 2011 - 04:14:55
Post Id


Новичок


Покинул форум
Сообщений всего: 20
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




Как вариант Вам можно создать поле в БД со временем последней активности!
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 тут словия идентификации юзера");

(Отредактировано автором: 09 Августа, 2011 - 04:16:16)

 
 Top
DeepVarvar Супермодератор
Отправлено: 09 Августа, 2011 - 08:03:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Craken пишет:
Как вариант
добавьте еще слово "единственный".
Конечно можно организовать это и иным способом, через подсчет количества файлов сессии, в директории установленной руками.
Но по мне так лучше и менее напряжно по ресурсам обратиться к БД которая оптимизирована и даже кеширует данные.
 
 Top
Uchkuma
Отправлено: 09 Августа, 2011 - 08:55:22
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




DeepVarvar пишет:
Конечно можно организовать это и иным способом, через подсчет количества файлов сессии
У меня это вовсе решено собственным механизмом сессий, организованных в БД.
 
 Top
illy
Отправлено: 09 Августа, 2011 - 09:07:40
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


Помог: 28 раз(а)




Файл 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>';
}


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
SAD Модератор
Отправлено: 09 Августа, 2011 - 09:14:39
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




зачем это извращение с файлами?
 
 Top
illy
Отправлено: 09 Августа, 2011 - 09:22:41
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


Помог: 28 раз(а)




SAD пишет:
зачем это извращение с файлами?

Потому что не пользуюсь Mysql Ха-ха


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
eramar
Отправлено: 09 Августа, 2011 - 09:32:25
Post Id


Новичок


Покинул форум
Сообщений всего: 57
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




мне не нужен список онлайн пользователей, просто делаю сайт наподобие соц сети с профилями пользователей , у которых на профиле отображается "онлайн" , если они на сайте. Спасибо за варианты решений!
 
 Top
DeepVarvar Супермодератор
Отправлено: 09 Августа, 2011 - 12:37:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




illy пишет:
Потому что не пользуюсь Mysql
Страшно?
 
 Top
White
Отправлено: 09 Августа, 2011 - 13:10:04
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011  
Откуда: Днепропетровск


Помог: 28 раз(а)




illy пишет:
Потому что не пользуюсь Mysql
религия не позволяет?


-----
if(time()>1356048000) die();
 
 Top
illy
Отправлено: 09 Августа, 2011 - 15:17:12
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


Помог: 28 раз(а)




White пишет:
религия не позволяет?

пока не т необходимости в Mysql


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
prog90
Отправлено: 17 Августа, 2011 - 18:42:49
Post Id


Гость


Покинул форум
Сообщений всего: 78
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




А может можно попробовать установить javascript код, который будет через ajax каждый пять минут отправлять сигнал на сервер в скрипт например, check_online.php, и если после пяти минут не поступило сигнала то значит браузер был закрыт или страница с javascript-кодом. А чтобы это было более интерактивным, то поставить частоту сигнала на 1 минуту, например.
Может быть такое пройдет.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB