Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2009, 22:09   #11
SwiP
Форумчанин
 
Регистрация: 18.03.2009
Сообщений: 101
По умолчанию

Ладно, с этими сессиями и кукями попозже разберусь. С defined в посте #5 надо разобраться. В принципе работает, но если я сделаю что-либо, например добавлю или удалю запись из БД, то опять меня выкидывает. Наверное потому, что defined после какого-то действия начинает получать пустое значение?
SwiP вне форума Ответить с цитированием
Старый 12.04.2009, 22:12   #12
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Когда пользователь xxx вводит логин/пароль, я проверяю наличие этого логина и пароля в БД. Если всё ок, то я создаю некий уникальный хеш, который записываю пользователю в куки.
PHP код:
setcookie("var1"$hashtime()+3600'/'); 
Создаётся куки на 1 час.
Переменная $hash также записывается в БД и принадлежит пользователю xxx. Когда пользователь обновляет страницу, то хеш из его куки сравнивается с хешем в БД. Если всё ок - значить пользователь уже прошёл проверку и может продолжать. Через час куки исчезает и пользователю нужно будет ввести пароль ещё раз.
Также в БД есть пометка что пользователь залогинился (то есть был создан новый хеш) в такое-то время. При проверке хеша также происходит проверка метки времени. Если метка старше чем 1 час, то хеш удаляется насильно, а у пользователя спрашивается логин/пароль снова. Таким образом если кто-то украл данный хеш у пользователя, он не сможет заходить под ним вечно.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 12.04.2009, 23:00   #13
SwiP
Форумчанин
 
Регистрация: 18.03.2009
Сообщений: 101
По умолчанию

Так.. То есть надо добавить ещё одно поле для хэша и метки времени в БД? И всь код надо писать в самой админке после проверки данных?
А если пользователь выйдет, и потом опять войдёт, то ведь по идее хэш ему новый выдасться, а в БД ещё старый...
SwiP вне форума Ответить с цитированием
Старый 12.04.2009, 23:58   #14
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Когда выдаётся новый хеш, он автоматом должен заменять старый. То есть обновлять.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 13.04.2009, 00:06   #15
SwiP
Форумчанин
 
Регистрация: 18.03.2009
Сообщений: 101
Вопрос

Ну вот, наляпал вот такой код.
PHP код:
$hash=mt_rand (0,1000); // Случайное число от 0 до 1000
setcookie("var1"$hashtime()+3600'/');  // Делаем печенье
$hashtime=time(); // Это узнаём текущее время
$query=mysql_query ("select hashtime from admmenu where id_adm=1"); // Запрос, какое у нас время в БД
$gethashtimefrombd=mysql_result ($query,0,'hashtime'); // Ну это результат в integer
echo ("$hashtime и $gethashtimefrombd"); // Просто для дебуга 
if ($hashtime $gethashtimefrombd+3600) { // Если текущее время больше времени в БД на 1 час
    
$send_hash=mysql_query ("update admmenu set temphash=$hash, hashtime=$hashtime where id_adm=1"); // Обновляем их
    
if (!$send_hash) echo "Ошибка! $mysql_error"// Если есть ошибки, то выводим
                                         
}
?> 
Такое сойдёт? Если времени прошло недостаточно, то ничего не произойдёт, если же больше часа, то обновляет.

Последний раз редактировалось SwiP; 13.04.2009 в 00:11.
SwiP вне форума Ответить с цитированием
Старый 13.04.2009, 04:17   #16
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

/me бьёт себя ладонью по лицу.

Сорри, тебе нужно всё-таки разобраться с алгоритмами авторизации. Читал какую-нибудь книжку по теме? Вообще стандартный алгоритм авторизации знаешь? Последовательность действий там..
Попробуй сначала на бумажке нарисовать общение сервер-клиент. Кто кому что и главное для чего передаёт.

Сначала пользователь вводит логин/пароль. Сервер сверяет всё ли ок. Если всё ок - генерирует хороший, трудноугадываемый хэш (1 вариант из 1000 я вручную угадаю), заносит этот хеш в базу вместе с временем заноса. Создаёт куки у клиента на 1 час.

Вариант а: Клиент приходит менее чем через час. Куки ещё живы, хеш тоже жив. Клиент передаёт серверу куки с хешем (для верности можно ещё логин в куки записать, но это необязательно). Сервер сверяет есть ли такая пара логин/хеш в базе. Если есть - даёт доступ к админке.

Вариант б: Клиент приходит позже чем через час. Куки умерли. Сервер запрашивает у клиента логин/пароль. Клиент вводит логин/пароль, сервер проверяет всё ли ок. Если всё ок - сервер создаёт новый хеш и заносит его в базу (обновляет старый) вместе с меткой времени.

Хеш можешь создать из: логин+название сайта+рандомный набор символов - всё это в md5. Вот тебе сложный хеш.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 13.04.2009, 08:37   #17
InCun
Пользователь
 
Аватар для InCun
 
Регистрация: 11.04.2009
Сообщений: 64
По умолчанию

Емм... а если человек зайдет на сайт. Запишется Хеш...
потом нажмет кнопочку Logout??
Что дальше, снова зайти в течении часа нельзя будет? Вы не забудьте про стирание Хеша после выхода, это раз. а второе, это глупо делать так....
Цитата:
Если времени прошло недостаточно, то ничего не произойдёт,
InCun вне форума Ответить с цитированием
Старый 13.04.2009, 13:49   #18
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

При логауте удаляются куки и обнуляются хеш и метка времени в базе. Это как бы по умолчанию должно быть так.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 13.04.2009, 15:37   #19
SwiP
Форумчанин
 
Регистрация: 18.03.2009
Сообщений: 101
По умолчанию

Спасибо за критику. Вообщем кое как я это сделал, но проблема есть, куки не удаляются после истечения времени, а так и продолжают висеть!
Для проверки я поставил время жизни куки и тех данных в БД не час а минуту. Выхожу со страницы, но кука так и остаётся висеть.
Поставил команду echo $var1; которая показывает содержимое куки. Она так и остаётся неизменной после обновления страницы, или же по истечению времени
ПэЭс: Но хотя бы реализовать главную задачу, запретить доступ без авторизации удалось

Последний раз редактировалось SwiP; 13.04.2009 в 16:22.
SwiP вне форума Ответить с цитированием
Старый 14.04.2009, 14:13   #20
SwiP
Форумчанин
 
Регистрация: 18.03.2009
Сообщений: 101
Вопрос

Есть ещё один вопрос. Например пользователь выбрал сессию на 1 час. Он поработал 10 минут и нажал на кнопку Выход. (я её реализовал так: она заменяет текущий куки на такой же с таким же именем, но пустым значением и временем действия 2 секунды).
Если он нажал кнопку выход и захочет опять войти, то ему будет отказано, т.к времени не прошёл час, а новая кука уже была создана, чей хэш отлмчается от оного, что в базе данных. В итоге он сможет зайти, только через час.
Что делать в таком случае? Может, если времени прошло недостаточно, то есть меньше часа, то будет создаваться кука со значением хэша из БД?
SwiP вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка правильности ввода. Whiplash Паскаль, Turbo Pascal, PascalABC.NET 6 14.11.2008 18:00
Проверка правильности ввода символов LLIypLLIyH Помощь студентам 7 22.07.2008 19:30
Проверка ввода Panda Помощь студентам 2 08.07.2008 19:23
проверка ввода данных в форму @Simpson JavaScript, Ajax 1 12.11.2007 02:17
Проверка ввода символов Raz0r Помощь студентам 2 06.11.2007 14:16