[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: система авторизации
dadli
допустим человек зарегистрировался на саите, потом он прошол авторизацю, и нажал кнопку "запомни мне", на странице авторизации проверям, ага, такои логин и парол сушествует в базе, всо ок, включаем сесию, а кукисов називаем например "cookiename", а значение даиом например логин етого ползователя. тоест так:
setcookie("cookiename",$login,time()+3600*24*365);

потом кажди раз, когда ползовател заходит на саите, на кажди странице проверяется через скл-запроса,
Свернутый текст
сам скл запрос что-то такого вида:
mysql_query("SELECT login FROM users WHERE login = '".$_COOKIE['cookiename']."' ");

если значение кукисов сушествует в базе, то ползовател авторизован,
если нет, говорим ему: "ви не авторизовани"


ето так происходит? тоест особенно интересует скл на каждои странице оправдано? или нужно по другому?
буду очен благароден за люби ответ.



Спустя 30 минут, 46 секунд (17.11.2011 - 17:30) killer8080 написал(а):
dadli
Ага, и что мешает подделать куки, и вписать туда чужой логин? wink.gif

Спустя 9 минут, 1 секунда (17.11.2011 - 17:39) lans8097 написал(а):
Нет это тупой способ так как кто угодно сможет зайти под логином админа
Лично я при входе клиента записываю 2 переменые с md5+соль записываю их в куки и аналогичные данные записываю в таблици sessions
В этой таблице 5 поля id,key1,key2,user_id,date
Зашол на сайт опа есть куки опа совпадает опа запускаем сесию

Спустя 8 минут, 23 секунды (17.11.2011 - 17:48) lans8097 написал(а):
Ещё видил прастой способ
Брался ник и шифровался в md5(md5(соль.md5(соль).соль)); и проверялось естли такой ник
Какие плюсы и минусы
+ не нужна отдельная таблица
+ быстрота проверки

- Если подберут метод шифра можешь спакойно выкидывать все пароли из базы
- Если агромный проэкт то просто тупо берём кучу хэша и системотично прогоняем через цикл пока не попадём на какой то логин. Да попыток будит оч много но шанс давольно велик ) )

Спустя 45 минут, 32 секунды (17.11.2011 - 18:33) killer8080 написал(а):
Цитата (lans8097 @ 17.11.2011 - 17:48)
- Если подберут метод шифра можешь спакойно выкидывать все пароли из базы

Вот по этому и нельзя хранить пароли в куках ни в каком виде. Механизма сессий вполне достаточно в большинстве случаев.

Спустя 3 часа, 12 минут, 52 секунды (17.11.2011 - 21:46) dadli написал(а):
killer8080
lans8097
да конечно сохранят значение кукисов в откритом виде ето не можно, тупанул я, но ето не понимаю: я сохраняю в куках какоита данние да? (захешированни через несколко мд5 + соль и т.д.) потом когда ползовател заходит на саите, проверяется: если ети данние которие в куках, совпадает данних которие есть базе, включаем сесию - даиом ползувателю привилегии. ето так?




Спустя 12 минут, 17 секунд (17.11.2011 - 21:58) KonstantinK написал(а):
вот тут http://irbis-team.com/15/7/4 понятно описано

Спустя 1 минута, 36 секунд (17.11.2011 - 22:00) killer8080 написал(а):
dadli
нет, ненужны тебе никакие дополнительные куки, просто при успешной авторизации в $_SESSION создавай флаг, а по его наличию определяешь авторизовался он или нет.

Спустя 15 минут, 23 секунды (17.11.2011 - 22:15) dadli написал(а):
killer8080
да ето понятно, ето при авторизации да?
я ето не понимаю: когда авторизованни ползовател закроит свои браузер сесии умерают да? и когда снова откроит браузер и заидиот на маиом саите, ему же не нужно снова авторизоватся, так как я ему браузеру задавал какоита данние через кукисов setcookie("имя_кукисов","значение_кукисов","время").
таак: сеичас нужно ети кукисов проверять, если такие данние есть на базе, то сесии стартуем, если нет, сесии не стартуем, я прав? так ето нада реализовать?

Спустя 9 минут, 10 секунд (17.11.2011 - 22:24) killer8080 написал(а):
dadli
нет, никаких setcookie() сессии сами создают куки. Реализовать можно например так. На страницах требующих авторизацию, подключаешь файл auth.php с таким содержимым
session_start();
if(empty($_SESSION['auth'])){
header('Location: /login.php'); // редирект на страницу авторизации
die();
}

На странице авторизации при успешной проверке логина/пароля создаешь в сессии флаг
$_SESSION['auth'] = 1;
и кидаешь обратно редиректом.

Спустя 36 минут, 7 секунд (17.11.2011 - 23:00) dadli написал(а):
killer8080
иизвини за маио глупост но не поиму: так, на кажди раз, если закрою браузер, потом открою и заиду на саите, саит хочет от меня что я снова авторизовалос sad.gif

Спустя 5 часов, 2 минуты, 6 секунд (18.11.2011 - 04:03) lans8097 написал(а):
Цитата (dadli @ 17.11.2011 - 18:46)
killer8080
lans8097
да конечно сохранят значение кукисов в откритом виде ето не можно, тупанул я, но ето не понимаю: я сохраняю в куках какоита данние да? (захешированни через несколко мд5 + соль и т.д.) потом когда ползовател заходит на саите, проверяется: если ети данние которие в куках, совпадает  данних которие есть базе, включаем сесию -  даиом ползувателю привилегии. ето так?

Мдауш а я думал эт у меня проблемы с русским

Значит так
Сценарий
Игорь пришол на сайт (Существует ли сессия userAction) если нет то Проверяем естли куки (Если куки совпали с ключями из баззы Производим процедуру создания сессии)Еслиже нет то росим авторизироваться

В общем где-то так
Сессия удоляется автоматически при закрытии браузэра по истичению времени указанным в настройках apach

а вот куки по истечению времени задынным при создания куки
Но очень редко куки доживают до конца своего времени чаще всего их удоляют пользователи )

p/s
Прежде чем юзать сессии и кукисы прогугли их мануал там есть подводные камни )

Спустя 6 часов, 41 минута, 50 секунд (18.11.2011 - 10:44) dadli написал(а):
lans8097

Цитата
Мдауш а я думал эт у меня проблемы с русским

а я победил вас laugh.gif

мне нет непонятност с сесиями, я их работу хорошо понимаю, я но понимаю что надо в куках сохранять

Цитата
Если куки совпали с ключями


вот ето не понимаю: что именно нада в куках сохранят?

Спустя 21 минута, 19 секунд (18.11.2011 - 11:06) killer8080 написал(а):
dadli
ненужно никаких дополнительных кук. Сессии создают свои куки, и этого вполне достаточно.
Единственное, в целях безопасности, имеет смысл делать привязку к IP и юзер агенту.

Спустя 6 минут, 41 секунда (18.11.2011 - 11:12) dadli написал(а):
killer8080

а как ето? что-то не понимаю, если не нужно setcookie(), то как запомнит например етото саит что ви killer8080 ? и как дапускает вас без новий авторизации, ему же нада что как то определит ползовател?
ето не понимаю

Спустя 12 минут, 51 секунда (18.11.2011 - 11:25) dadli написал(а):
вот например так сделаю страницу авторизации: (здес не пишy никаких мускл_реал_ескапе_стринг() и мд5 и так далее, патаму здес ето не важно)
if (isset($_POST['login'])) {
$login = $_POST['login'];
}
if (isset($_POST['password'])) {
$password = $_POST['password'];
}

$res = mysql_query(
"SELECT login FROM users WHERE
login = '"
.$login."' AND password = '".$password."' ",$db);
$row = mysql_fetch_row($res);

if (mysql_num_rows($res) != 1) {
exit("login i/ili parol ne pravilni");
}

session_start();
$_SESSION['login'] = $row[0];

сесия стартуется хорошо, когда я на саите, я авторизован, но если закрою -> открою браузер уже нада мне снова авторизоватся, если сесии сам саздаёт кукисов, то почему не происходит автометически авторизаця ?

Спустя 1 час, 19 минут, 17 секунд (18.11.2011 - 12:45) lans8097 написал(а):
Цитата (killer8080 @ 18.11.2011 - 08:06)
dadli
ненужно никаких дополнительных кук. Сессии создают свои куки, и этого вполне достаточно.
Единственное, в целях безопасности, имеет смысл делать привязку к IP и юзер агенту.

Как не надо ? )
Если я не ошибаюсь то утт шла речь не просто об авторизации а также и об авто авторизации
Тобиш зашол авторизировался и сиди пока кукисы не закончиться ну или пока базу не почистят.
А проверять по ip не вижу смысла так как восновном у всех стаит динамический айпи а у некотрых он вобще каждые 2 чеса меняеться
Я туже прочитал агромную кучу статей по этой теме и пришол к выводу что самый оптимальный вариант это 2 3 уни ключика и сопоставления их с базой
Щяс набросаю небольшой пример


<?php
session_start();
if(!empty($_SESSION['user'])){
echo'Привет '.$_SESSION['user']['name'].' вы уже авторизированы';
}else{
//Если сессии не существует то проверяем на наличии кукисов
if(!empty($_COOKIE['key1']) && !empty($_COOKIE['key2'])){
//Оброщяемся к базе к таблице session и проверяем естли запись с данными ключиками
$myrow = mysql_query("SELECT user_id FROM `sessions` WHERE `key1`='".$_COOKIE['key1']."' AND `key2`='".$_COOKIE['key2']."'");

if(mysql_num_rows($myrow)){
$result = mysql_fetch_assoc($myrow);
//Вызываем данные о пользователе и записываем сессию
$myrow = mysql_query("SELECT `name`,`login`,`grup` FROM users WHERE id='".$result['user_id']."'");
$result = mysql_fetch_assoc($myrow);
$_SESSION['user']['name']=$result['name'];
$_SESSION['user']['login']=$result['name'];
$_SESSION['user']['grup']=$result['grup'];
}else{
//Если нет совпадений всёравно просим пройти авторизацию
}

}
else{
//Если куков не найдено то просим авторизироваться
}
}

?>


Эт оч грубый набросок но смысл верен

Спустя 59 минут, 28 секунд (18.11.2011 - 13:44) dadli написал(а):
lans8097
ааа понимал, ну не уверен что ето так, думаю killer8080 прав, не нада никаких setcookie(), нада исползовать session_set_cookie_params() чтоби установит сесионние куки
killer8080
ето так?

Спустя 4 минуты, 2 секунды (18.11.2011 - 13:48) killer8080 написал(а):
Цитата (lans8097 @ 18.11.2011 - 12:45)
Как не надо ? )
Если я не ошибаюсь то утт шла речь не просто об авторизации а также и об авто авторизации
Тобиш зашол авторизировался и сиди пока кукисы не закончиться ну или пока базу не почистят.

Сессия устанавливает свою печеньку, в её уникальности никто не сомневается, нет смысла генерить дополнительные идентификаторы. Если нужно сделать длительное хранение сессии, то либо меняются настройки session.gc, либо ид сессии сохраняется в базе. Ну и само собой настроить сессионные куки на длительное хранение. Этого вполне достаточно. Никаких зашифрованных логинов/паролей в куках хранить нельзя, это уже будет уязвимость.
Цитата (lans8097 @ 18.11.2011 - 12:45)
А проверять по ip не вижу смысла так как восновном у всех стаит динамический айпи а у некотрых он вобще каждые 2 чеса меняеться

А тут уже сам решаешь что важней, удобство пользователям, или безопасность. Желательно привязывать не только к ip, но и к http заголовкам (конечно не ко всем, а только к статичным).
Если привязок не делать, то аккаунт можно угнать банальной кражей кук.

Спустя 33 секунды (18.11.2011 - 13:49) killer8080 написал(а):
dadli
совершенно верно.

Спустя 1 минута, 39 секунд (18.11.2011 - 13:50) lans8097 написал(а):
Цитата (dadli @ 18.11.2011 - 10:44)
lans8097
ааа понимал, ну не уверен что ето так,  думаю killer8080  прав, не нада никаких setcookie(), нада исползовать session_set_cookie_params()  чтоби установит сесионние куки
killer8080 
ето так?

Ну если тебе нужно просто авторизировать на период сессии то да
Но если ты хочиш чтобы пользователь каждый раз заходив на сайт не авторизировался заново а это происходило мгновенно то по-любому нужно хранить куки ибо не захломлять сервер

Но может я не прав так как тот способ не пробывал
Но уже подумав о нём он мне не понравился

Спустя 4 минуты, 57 секунд (18.11.2011 - 13:55) killer8080 написал(а):
Цитата (lans8097 @ 18.11.2011 - 13:50)
Но если ты хочиш чтобы пользователь каждый раз заходив на сайт не авторизировался заново а это происходило мгновенно то по-любому нужно хранить куки ибо не захломлять сервер

Ага, а таблица sessions это что wink.gif Что мешает туда записать ид сессии, вместо дополнительных идентификаторов. Смысл их вообще генерировать?

Спустя 18 минут, 17 секунд (18.11.2011 - 14:13) dadli написал(а):
lans8097
killer8080
ну балшое челавечиски спасибо оба вам, очен благароден за помош и за ответаx, дьержите плюсики smile.gif

Спустя 4 минуты, 25 секунд (18.11.2011 - 14:18) killer8080 написал(а):
dadli
да не за что smile.gif


_____________


когда чарли чаплин принимал участие в конкурсе: "клон чарли чаплинов", то чарли занимал третю позицию.

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.