в таблице 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' ");
Скажите, пожалуйста, если человек использует кнопку "запомнить меня" (использую кукисы), закрывает сайт , не нажимая выход. Как поставить его статус в оффлайн, когда его нет на сайте ?
1. eramar - 08 Августа, 2011 - 11:19:15 - перейти к сообщению
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 тут словия идентификации юзера");
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>';
}
При переходе на любую страницу в файле 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
![Ха-ха Ха-ха](./im/emoticons/laugh24.gif)
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 минуту, например.
Может быть такое пройдет.
Может быть такое пройдет.