К списку форумов К списку вопросов
Нужна помощь по PHP - описать в теме проблему сложно
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)клиентский закрытый ключ//только для получения ключа авторизации

К списку вопросов на форуме Веб-дизайн

>>