Всем привет.
На хостинге крутится сайт, к которому хочу приделать что-то похожее на админку, а то уже порядком поднадоело руками в mysql ковыряться. Собственно стал в вопрос с алгоритмом аутентификации, в гугле нарыл несколько вариантов, но вот насколько они актуальны не знаю. Подскажите пожалуйста что лучше сделать в этом направлении ?
Авторизация на сайте
"Сайт" на PHP?
Первое что в глаза попалось, оба варианта вполне актуальны:
Система авторизации HTTP-Basic
Система авторизации на PHP
UPD
Авторизация на php (тоже неплохой вариант)
"Сайт" на PHP?
Первое что в глаза попалось, оба варианта вполне актуальны:
Система авторизации HTTP-Basic
Система авторизации на PHP
UPD
Авторизация на php (тоже неплохой вариант)
да. Сделаю пока так:
При вводе логина и пароля создается хэш сумма логин+пароль+(какая нить строка)
если соотношение логин/хэш правильное
в кукиесы ложится произвольный идентификатор, а на стороне сервера записывается этот идентификатор и время до которого он действиетелен
при каждом запросе на закрытую страницу будут сравниваться идентификаторы.
Думаю так пойдет.
или лучше использовать идентификатор сеанса (SID), а не кукиесы ?
Тоже интересно, можно ли обойтись без кукисов?
Тоже интересно, можно ли обойтись без кукисов?
Не совсем без кукиесов. На скок я понял "механиз отслеживания сессий" по возможности использует куки, а если они не поддерживаются, то всем компьютерам с таким внешним Ip будет присвоен единый идентификатор(и доступны одинаковые данные). Думаю на куках все-же будет лучше
Если вы промышляете процедурным программированием (не ООП), то тут все просто очень:
1) Юзер имеет $_SESSION['id']? Если нет, то может он имеет $_COOKIE['id']? Если да, то переносим ID из куки в сессию, если нет, то отказываем в доступе.
2) При залогивании проверяем является ли md5 (пароль+соль) введенный = md5 (пароль+соль) из БД (выборка по username/email и пр.). Если все ок - добавляем в $_SESSION['id'] айдишник юзера + если стояла галочка "Запомнить меня", то еще и куки добавляем (для чего - см. п.1).
3) При регистрации или добавлении пользователя делаем sha512 либо md5 из логина, и любых рандомных данных (время, дата и пр) соль и опять же шифруем ее с паролем.
Временно сделал так:
В форме авторизации проверяет установлены ли куки ? Если да то перебрасывает на рабочую страницу. Если нет дает ввести логин/пароль
<?php
if (!is_null($_COOKIE['id'])){
echo "Вы авторизованы сейчас вас перебросит на нужную страницу";?>
<script language = 'javascript'>
var delay = 5000;
setTimeout("document.location.href='http://test/adminka/t'", delay);
</script>
далее обычная html форма
<?php }
После нажатия кнопки "войти" запускается скрипт, который проверяет MD5(логин+пароль+мусор) на наличие в базе. Если все хорошо клиенту в куки шлю ID и в базу записывается его ID и время до которого он действителен.
if(isset($_POST['name'])){
include 't/connect.php';
$log=$_POST['name'];
$q=mysql_query("SELECT pas FROM auth WHERE login='$log'") or die ("нетуда");
$f=mysql_fetch_row($q);
if (MD5($_POST['name'].$_POST['passwod']."xb[ef[ef")==$f[0]){
$tmp=MD5(rand(1,10).rand(10,25).date()."ytgjyznrf!");
$da=time()+3600;
$lg=$_POST['name'];
if (mysql_query("UPDATE auth SET id='$tmp', limitD='$da' WHERE login='$lg'")){
if (SetCookie("id","$tmp",time()+3600))
header("Location: http://test/adminka/t");
else
exit("невозможно установить кукиесы");
}
else
exit ("нетуда брынь $mysql_error()");
}
else{
echo "неправильно введен пароль";
header("Location: http://test/adminka");
}
}
else
exit ("за вами выехала милиция");На запароленых страницах проверяется ID пользователя и время до которого он действителен, если он не действителен удаляем.
if(isset($_COOKIE['id'])){
include 'connect.php';
$q=mysql_query("SELECT id, limitD FROM auth");
$f=mysql_fetch_row($q);
if ($_COOKIE['vmovsid'] == $f[0] && time() < $f[1]){
$a=rand(1,2); // ниче не делаем
}
else {
setcookie('id','',time()-3600);
exit ("попробуйте авторизоваться заново");
}
}
else
exit("вы не прошли <a href='/adminka'>авторизацию</a> на сайте");
Единственная проблема это удаление кукиесов. Подскажите пожалуйста как это сделать ? Куки устанавливаются в локации /adminka а удалить пытаюсь из /adminka/t