![]() |
![]() |
xaka 23.06.2004 - 20:53 |
Мне нужно сделать такую вот штуку: есть Login, Password. Нужно сделать так, чтобы в одно и тоже время под этими данными мог сидеть только один человек. Причем как-то сделать отключение пользователя, если он закроет браузер(если например случайно забудет нажать кнопку Выход). Интересует реализация задачи только на PHP, без использования JavaScript. Если можно - опиши подробнее предложенный вами метод... |
Lucifer 1 - 23.06.2004 - 22:45 | сессии |
Deflorator 2 - 23.06.2004 - 23:42 | как-то неприлично повторяться... :( |
Mips 3 - 24.06.2004 - 05:11 | поторгуемся? ;) |
xaka 4 - 24.06.2004 - 12:03 | Да какие тут сессии - мне нужно запретить вход по одному и тому же Логину и Паролю в данное время. Тоесть если кто-то седит под этими данными - то другой неможет под ними зайти, пока не освободится "место". Сессии на каждого отдельно создаются, а как я проверю - седит ли в данный момент кто-то под этими данными? |
Zeratul 5 - 24.06.2004 - 12:11 |
$registered_login = $login; session_register ("registered_login"); ... $res = mysql_query(" SELECT login FROM users_accounts WHER login='".$registeres_login."'"; if (mysql_num_rows($res)) { print "Кури бамбук - логин занят"; exit; } |
Zeratul 6 - 24.06.2004 - 12:13 |
дурацкие описки ------------------------ $registered_login = $login; session_register ("registered_login"); ... $res = mysql_query(" SELECT login FROM users_accounts WHERE login='".$registered_login."' "); if (mysql_num_rows($res)) { print "Кури бамбук - логин занят"; exit; } |
xaka 7 - 24.06.2004 - 17:25 |
А как же сделать так, чтобы ЧЕЛОВЕКА якобы выкинуло, если он нажмет на кнопку ЗАКРЫТЬ окна браузера? Причем таймаут тут не подойдет - а может чел отошел на 3 часа, а потом вернулся. P.S. если очень сложно понять, что мне надо, то мне нужен алгоритм(принцип)работы любой АДМИНКИ для форума, хотябы этого |
Mips 8 - 24.06.2004 - 17:42 | только по таймауту. Переодически опрашивать сервер (раз в минуту например) |
Syd Barrett 9 - 24.06.2004 - 18:36 | javascript см. onclose |
_van 10 - 24.06.2004 - 18:41 |
При аворизации юзера генери на сервере случайный ключ авторизации. В клиенте на таймер вешаешь каждую минуту отсылать на сервер этот ключ. Если на сервере 3 минуты не было получено ключа данного юзера- закрываешь авторизацию. ` Этого достаточно, но можно ещё и защититься- при авторизации на сервере сгенерить пару открытый-закрытый ключ шифрования, на ontime посылать с клиента ключ авторизации где. Открытым ключем на клиенте кодируешь строчку 'ключ_авторизации+номер_отсылки'. ` P.S: Такая защита даст впринципе 100% гарантию. Что нибудь не понятно? |
Zeratul 11 - 24.06.2004 - 20:06 |
to xaka: блин... ну мозгами пошевели... 1. Если тебе нужно чтобы чувака выкидывало при закрытии окна, то это и происходит с сессиями. Они живут пока окно открыто. 2. Если тебе нужно чтобы чувака выкидывало через некоторое время бездействия, то дописываем код: $registered_login = $login; $last_activity_time = time(); session_register ("registered_login"); session_register ("last_activity_time"); ... $res = mysql_query(" SELECT login FROM users_accounts WHERE login='".$registered_login."' "); if (mysql_num_rows($res)) { print "Кури бамбук - логин занят"; exit; } ... $time = time(); if (($time - $timeout) > $last_activity_time) { print "Слишком долго курил - свободен!"; exit; } $last_activity_time = $time; |
_van 12 - 25.06.2004 - 20:22 |
чтобы было 100% гарантии защиты на клиентской странице тоже зашиваешь алгоритм открытых-закрытых ключей. Авторизацию на сервере открываешь только после того как на сервер пришел сгенеренный открытый ключ с клиента- им кодируешь сгенерированный на сервере ключ авторизации и шлешь вместе с серверным открытым ключом шифрования. Тоесть ключ авторизации гарантированно будет только на сервере и одном клиенте. Повторюсь что с клиента на онтайм отправляешь строчку 'ключ_авторизации+номер_отсылки' зашифрованную открытым ключем сервера. ` примерная структура Сервер таблица с полями: 1)логин 2)ключ_авторизации //случаным образом генерится при открытии авторизации клиенту. 3)серверный_открытый_ключ 4)серверный_закрытый_ключ 5)время_последнего_полученного_с_клиента_подтверждения 6)номер_последнего_полученного_с_клиента_подтверждения// очень нужен- чтобы не принимать подделок- копий уже состоявшихся подтверждений, подлинные новые подтверждения только те которые имеют номер больший чем в этой таблице 7)клиентский_открытый ключ// впринципе в алгоритме используется только один раз, но можно его использовать чтобы передавать авторизованным клиентам защищенную инфу. ` Клиент переменные: 1)ключ_авторизации 4)номер последнего_отправленного_с_себя(клиента)_подтверждения 3)серверный_открытый_ключ 4)клиентский_открытый_ключ//только для получения ключа авторизации 5)клиентский закрытый ключ//только для получения ключа авторизации |