пользователи онлайн

Vin-Diesel

Новичок
setInterval('pingUser()',600000); // каждые 10 минут срабатывает функция
а у тебя есть такая функция? её еще нет.
Сначала определи функцию, а потом уже вешай её на таймер.

как поддерживать? обновляй время последнего обращения.
и кроном убивай старые сессии
 

scorpion-ds

Новичок
scorpion-ds, стараюсь разобраться. хочется научится это делать, чтоб потом не было проблем и я был в курсе темы.
а вот как сделать возвратную функцию и что возвращать обратно - не знаю.
Если бы ты внимательно прочитал информацию по ссылкам, которые тебе дали, то узнал бы про метод "success", который выполняется в случае успешного ответа.

в session.php я делаю проверку на существование сессии и если сессия есть, то делаю пометку с датой в БД.
но как постоянно поддерживать сессию я до сих пор так и не понял : (
Для проверки и поддержания сессии надо использовать $_SESSION или $_COOKIE, или возможно я не понял, того чего ты не понял.

чтоб не было лишних вопросов говорю сразу, что пока хочу написать вариант в котором нахождение на сайте считается открытый браузер с этим сайтом и авторизованный пользователь.
Учитывать открытый браузер невозможно, использование "пингование" сервера единственный вариант, использование функции $.ajax один из путей достижения твоей цели.
 

Beavis

Banned
и исправь ошибки синтаксиса javascript, о которых говорит тебе браузер
 

djkoff

Новичок
Я, наверное, всё-таки чего-то не понимаю.
Пользователь заходит на сайт, авторизуется, создаются сессии $_SESSION['login'] и $_SESSION['password'], пользователю разрешен доступ к контенту сайта.
Требуется сделать так, чтоб пользователь был в онлайне столько времени сколько открыт его браузер, даже если на сайте он не производит никакой активности, как только браузер или страница браузера с этим сайтов закрывается (или интернет отключается) должно считаться, что пользователь оффлайн.

К сожалению, на просторах интернета я не нашел примеров, которые соответствовали бы этому. Я даже не нашел толкового описания того как сделать онлайн, оффлайн.

Вы мне советуете применять пинги. Для Вас это просто, понимаю. Но я уже несколько часов читаю все те сайты, что Вы мне дали, но никак не могу понять что же мне сделать. С $.ajax() я знаком, делал и таймер, и обновление контента, и знаю про success, но моих скудных знаний не хватает, чтоб сделать работающую и правильную версию онлайн модуля.

Сказать честно, я топчусь на одном месте и не могу ничего вразумительного сделать.
 

baev

‹°°¬•
Команда форума
Требуется сделать так, чтоб пользователь был в онлайне столько времени сколько открыт его браузер, даже если на сайте он не производит никакой активности, как только браузер или страница браузера с этим сайтов закрывается (или интернет отключается) должно считаться, что пользователь оффлайн.
— читайте http://phpfaq.ru/na_tanke до полного просветления.
 

Beavis

Banned
зачем ты в сессии хранишь пароль?

чтобы тебе помочь, ты должен сделать первый шаг, т.е. выложить сюда код, который ты написал, но он не работает
ты выложил, мы указали тебе на ошибки.
вместо того чтобы исправить их, ты опять начинаешь ныть

никто за тебя код писать не будет, пойми
 

djkoff

Новичок
ошибка новичка, я так тоже сделал в своем первом скрипте с авторизацией, потом только догадался, что он там вовсе не нужен.
ну я куки тоже использую : )
ну а как по другому? без сессий?
на одних куках далеко не уедешь.
 

scorpion-ds

Новичок
ну я куки тоже использую : )
ну а как по другому? без сессий?
на одних куках далеко не уедешь.
На куках ты как раз дальше, чем на сессия уедешь, им ведь можно выставлять время жизни и некоторые другие параметры, но суть не в это, логин и пароль хранить в куках не следует и не имеет смысла, достаточно хранить ID-сессии, собственно для этого в PHP есть встроенный "механизм", но я в свое системе делаю по своему:
- при первом посещении создается уникальный код (для гостей в том числе), который хранится в куках;
- после авторизации этот код может быть связан с учетной записью или создан новый, при этот код также хранится в специальной таблице БД, для одного пользователя может быть N-таких кодов, то есть можно одновременно авторизоваться через разные барузеры;
- дальше при посещении код из кука сравнивается с записью в БД, если такой код там есть, считаем пользователя авторизованным.
 

djkoff

Новичок
scorpion-ds
Достаточно интересно, возьму на вооружение, но можно ли подобную схему применять на сайте, где авторизация выполнена как в чатах или играх?
 

scorpion-ds

Новичок
scorpion-ds
Достаточно интересно, возьму на вооружение, но можно ли подобную схему применять на сайте, где авторизация выполнена как в чатах или играх?
Не вижу различий, но точно не стоит хранить пароль в куках, так как от туда его можно извлечь без особого труда.
 

djkoff

Новичок
так, додумался только как выводить онлайн или оффлайн пользователь

PHP:
<?php
session_start();

$second = 600;
$real_time = time();
$id_user = $_SESSION['id_user'];

$sql = mysql_query('SELECT realtime FROM users WHERE ID = '.$id_user);
$res = mysql_query($sql); 

$real_time_db = $r['realtime'];

$raznitca_time = $real_time - $real_time_db;

if($raznitca_time < 600) {
	mysql_query('UPDATE users SET realtime = '.$raznitca_time.' WHERE ID = '.$id_user);
	
	echo 'онлайн';
} else {
	echo 'оффлайн';
}
?>
а вот как поддерживать онлайн я не додумался : (
 

Beavis

Banned
и код, который ты написал, делает не то что тебе говорили сделать
если тебе не интересны советы как сделать правильно, что ты тут делаешь вообще?
 

djkoff

Новичок
Beavis

Я не понимаю как "сделать правильно".
Чтоб мне чему-то научится и делать правильно нужны конкретные примеры, для меня слово "пинг" ничего конкретно не объясняет.
Попытался что-то сделать на том языке, который я знаю, мне говорится, что это неправильно и отправляют в начало форума. : (
 

Vin-Diesel

Новичок
так, додумался только как выводить онлайн или оффлайн пользователь

PHP:
<?php
session_start();

$second = 600;
$real_time = time();
$id_user = $_SESSION['id_user'];

$sql = mysql_query('SELECT realtime FROM users WHERE ID = '.$id_user);
$res = mysql_query($sql); 

$real_time_db = $r['realtime'];

$raznitca_time = $real_time - $real_time_db;

if($raznitca_time < 600) {
	mysql_query('UPDATE users SET realtime = '.$raznitca_time.' WHERE ID = '.$id_user);
	
	echo 'онлайн';
} else {
	echo 'оффлайн';
}
?>
а вот как поддерживать онлайн я не додумался : (
Чтобы найти все несколько записей, не нужно вытаскивать весь миллион.
 

delorge

Новичок
Я не понимаю как "сделать правильно".
Чтоб мне чему-то научится и делать правильно нужны конкретные примеры, для меня слово "пинг" ничего конкретно не объясняет.
Попытался что-то сделать на том языке, который я знаю, мне говорится, что это неправильно и отправляют в начало форума. : (
Код, который ты написал, нерабочий. Если не веришь - запусти и убедись.
Тебе надо отладить его и убрать ошибки, чтобы он работал так, как тебе надо.
Если этот процесс вызовет у тебя затруднения, задай конкрентый вопрос с указанием что именно тебе непонятно.
Если тебе непонятно слово "пинг", набери его в поисковике. На основании полученных данных сделай свое собственное предположение о том, что тебе надо сделать и напиши его здесь, чтобы твое предположение подтвердили или опровергли.
Тебе не будут помогать, пока не увидят, что ты сам пытаешься что-то сделать.
 

Beavis

Banned
Beavis
Я не понимаю как "сделать правильно".
Чтоб мне чему-то научится и делать правильно нужны конкретные примеры, для меня слово "пинг" ничего конкретно не объясняет.
Попытался что-то сделать на том языке, который я знаю, мне говорится, что это неправильно и отправляют в начало форума. : (
1. забудь слово "пинг", если оно тебе не понятно
2. в таблице пользователей создай поле last_visit типа DATETIME
3. создай php-скрипт, который при запуске обновляет значение данного поля для текущего пользователя, записывая туда время обновления
4. создай javascript, который посылает AJAX-запрос скрипту, созданному в п. 3, и сделай отправку запроса через опреденный интервал времени
5. создай php-скрипт, который будет выводить информацию о статусе пользователей: если у пользователя last_visit отличается от текущего времени больше чем на интервал, с которым ты делаешь ajax-запросы, значит пользователь оффлайн, иначе - онлайн.

если ты выполнишь все пункты по порядку, то получишь результат
не переходи к следующему пункту, пока не сделаешь предыдущий, и не проверишь что он работает правильно
прежде чем писать что ничего не получилось, выложи сюда код, который ты написал для пунктов 3, 4, 5
 
Сверху