Умная аутентификация пользователя

flasher777

Новичок
Умная аутентификация пользователя

Здрасте, у меня возник вопрос по PHP(я знаю, что тема не раз поднималась, но....). У меня есть сайт, мне нужна авторизация, у меня на PHP регаются. Все это заносится в MySQL базу. Когда юзер вводит имя и пароль там все проверяется... и если все ОК создается сеансовая переменная. Она принимает вид 1 и обновляется в ячейки базы с 0 на 1. Так я определяю онлайн ли он. Но когда он(юзер) уходит сеансовая переменная уничтожается. Мне это и надо, вот только как теперь обновить чтоб заново на 0 было, если все закрыто, Именно для этого пользователя?
Я уже пробывал onunload, но у меня что-то не получается :( , я перерыл кучу инфы, но находил все кусочками. Я провел в форумах уже 45 часов, все такие умные - нормально ответить не могут. По одному слову пишут. То onunload, то NOW(), а как все использовать никто не подскажет, пинают от теме к теме :( .
ВОПРОС: Как сделать ДВОЙНУЮ ПРОВЕРКУ - работу скрипта после закрытия и проверку на таймаут в 5 минут. т.е если юзер не активен(не обновляет или не пишет, не скачивает) 5 минут, то присваевать 0.
Напишите код с комментариями или ссылку, где все умно опишут (только не надо писать там в углу есть поиск и т.п.)
ПОМОГИТЕ ПОЖАЛУЙСТА!!!
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Делай как все нормальные люди.
А нормальные люди берут данные относительно активности юзера за последних 10-20-30 минут.
Когда юзер обращается к странице - обновляй время обращения.
Или/с конбинцией обновления данных юзера через AJAX.

Напишите код с комментариями или ссылку, где все умно опишут (только не надо писать там в углу есть поиск и т.п.)
ПОМОГИТЕ ПОЖАЛУЙСТА!!!
Здесь никто не будет решать твоих задач.

Оч нада? Раздел Работа к твоим услугам.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
т.е если юзер не активен(не обновляет или не пишет, не скачивает) 5 минут, то присваевать 0.
Тебе мало хранить признак онлайн/оффлайн, храни еще время последней активности. (добавь еще одно поле, с временем, и обновляй его для этого пользователя каждый раз)
Соответсственно, можешь написать небольшой скрипт, который будет исполнятся раз в 5 минут, и проставлять всем нолики, у кого временная метка истекла. Вопросы?
 

flasher777

Новичок
Я не спрашиваю сколько времени мне ставить я привел пример, я СПРАШИВАЮ ФУНКЦИИ. Я не сильно знаю редкие функции PHP. Как мне это сделать - по последней активности и др.
 

Bitterman

Новичок
Функции все те же самые - для работы с БД. При каждой загрузке страницы пиши текущее время в БД. При проверке онлайн/не онлайн сравнивай текущее время и записанное в БД. Если разница больше 5 минут (например), то пользователь в оффлайне, если меньше - онлайн.
 

bojan

Новичок
Причём тебе флоппик уже посоветовал как сделать
 

flasher777

Новичок
Извеняюсь за тон, просто мне никто не помогает. Так алгоритм я знаю. Как именно написать?
Например в таблице есть поле last_time = nnnn, пользователь заходит оно обновляется, что дальше? как сделать проверку на неактивность?
2) Как правильно оформить onunload?
 

flasher777

Новичок
Да вот именно, что никак. У меня были недаработаны сеансовые переменные, но прочитав кучу инфы и потерпев неудачу (почему-то) с onunload, я решил изменить тип проверки на таймаут.

-~{}~ 05.08.08 13:05:

Автор оригинала: Mr_Max
Делай как все нормальные люди.
А нормальные люди берут данные относительно активности юзера за последних 10-20-30 минут.
А как взять данные?
 

Beavis

Banned
да забудь ты про свой onunload !
В таблице с пользователями сделай поле DATETIME, в котором храни время его последнего обращения.
Для того чтобы определить, онлайн ли пользователь, просто получи значение данного поля, и посмотри, если оно отличается от текущего времени более чем на 10/20/30 минут, значит пользователь оффлайн.
А чтобы получить список онлайн-пользователей, сделай запрос типа "выбрать всех пользователей, у которых время последнего обращения > (NOW() - 10 минут)
И всё, не надо никаких unload'ов, признаков online/offline и т.д.
 

flasher777

Новичок
Beavis
А чтобы получить список онлайн-пользователей, сделай запрос типа "выбрать всех пользователей, у которых время последнего обращения > (NOW() - 10 минут)
Большое спасибо за просветление, но пожалуйста можно чуть подробнее про (NOW() - 10 минут), а то мне это совсем не знакомо!

-~{}~ 05.08.08 13:21:

Меня тут осенило, что мне еще нужно чистить базу. там у меня стоит 1ая авторизация за 2 часа, но вот если пользователь не вернется, скрипт для него не запуститься и он останется в базе. Как мне быть.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Большое спасибо за просветление, но пожалуйста можно чуть подробнее про (NOW() - 10 минут), а то мне это совсем не знакомо!
Слушай вот ты противоречишь сам себе.
То у тебя база юзеров в БД с которой ты без проблем работаешь, а то тебе совсем незнакомо.

Хрестоматию по БД и php тебе пересказывать не будут.
Первым делом читай все что
PHP FAQ: Хочу изучать PHP и Mysql. С чего начать?
 

Beavis

Banned
Автор оригинала: flasher777
Большое спасибо за просветление, но пожалуйста можно чуть подробнее про (NOW() - 10 минут), а то мне это совсем не знакомо!

-~{}~ 05.08.08 13:21:

Меня тут осенило, что мне еще нужно чистить базу. там у меня стоит 1ая авторизация за 2 часа, но вот если пользователь не вернется, скрипт для него не запуститься и он останется в базе. Как мне быть.
Ну и что плохого в том, что он останется в базе? Ведь время последнего доступа будет отличаться более чем на 10 минут от текущего => скрипт определит что пользователь оффлайн. Если очень напрягают "мертвые" юзеры в таблице - запускай по крону очистку.

Про NOW() минус 10 минут можешь и сам догадаться, включи голову.
 
Сверху