Xwab
Форумыnavigate_nextПрограммирование на PHP

Авторизация не пашет
Сообщения
Afictox

? алед еикаТ

06 Янв 2012, 4:18
MaikL

JoiNeD, в случае если проверять только на empty($_COOKIE['abc']) при несуществующей куке обязательно вылетит ошибка несущесвующей куки.
Так же как если выполнять какие либо операции с переменной которой несуществуют.
Но некоторые хостинги избавляются от подобной проблемы заменяя недостающие переменные на парраметр false, либо запрещают вывод незначительных ошибок.
Тем самым облегчая жизнь начинающим программистам.

06 Янв 2012, 9:05
JoiNeD

MaikL, <?php
error_reporting(9999);
ini_set('display_errors', true);
echo (empty($a) ? 'Переменной $a не существует либо она пуста' : 'Переменная $a существует');
?>
Запусти этой код и почитай все таки про функцию empty

06 Янв 2012, 9:58
Afictox

Наверное, php-тег зря ввели

06 Янв 2012, 10:00
JoiNeD

Afictox, так привычнее да и лично для меня удобнее)

06 Янв 2012, 10:01
san

Epic trash. Про empty уже написали - читать мануал, а не нести чуш.
А сама авторизация не более чем куча говнокода которая будет мешать пользователю. К слову галочка 'чужой компьютер' означает что куки ставятся до закрытия браузера, а у автора непонятных и не нужных махинаций.
добавлено спустя 37 минут:
Продолжим 8)
[php:1:0bb49ea5df]
$_COOKIE['password']
[/php:1:0bb49ea5df] - голый пароль в куках? Оригинально че.
[php:1:0bb49ea5df]md5(mysql_escape_string(...))[/php:1:0bb49ea5df] - wtf? в md5 нет sql-injection
[php:1:0bb49ea5df]
if (isset($_COOKIE['sess']) && !empty($_COOKIE['sess'])){
$sess = htmlspecialchars($_COOKIE['sess']);
}else{
$sess = sess();
setcookie("sess", '');
setcookie("sess", $sess);
}
[/php:1:0bb49ea5df] вот этот говнокодец повторяется дважды и вообще не несет никакой смысловой нагрузки.
Как и весь механизм работы с сессиями. У автора большая тяга к велосипедам, только на велосипеде надо ездить, а не писать его  Особенно когда написанное есть в самом php.
И таки еще один пинок. Это не авторизация, а аутентификация

06 Янв 2012, 12:18
MaikL

san, С md5 согласен, учту!

Несогласен с:
<?
if (isset($_COOKIE['sess']) && !empty($_COOKIE['sess'])){
$sess = htmlspecialchars($_COOKIE['sess']);
}else{
$sess = sess();
setcookie("sess", '');
setcookie("sess", $sess);
}
вот этот говнокодец повторяется дважды и вообще не несет никакой смысловой нагрузки.

Причина повторения ясно видна:
$q = mysql_query("SELECT * FROM `$mysql[pref]users` WHERE (`time` >= '".$livetime."' AND `sess` = '".$sess."') OR (`nickname` = '".$cookie_log."' AND `password` = '".$cookie_pass."');");
if(mysql_num_rows($q)!= 0){
$user = mysql_fetch_array($q, 1);
if ($user['nickname'] == $cookie_log && $user['password'] == $cookie_pass && $user['time'] < $livetime){
$sess = sess();
setcookie("sess", '');
}else{
$sess=$user['sess'];
setcookie("sess", '');
}}else{
Повтор
}

Если мельком взглянуть на код, то да кажеться повторяеться, а значит ненужно, но если внимательно присмотреться к растоновке {} в условиях, то будет видно, что это зделано с целью категорического недопущения двоих юзеров с одной и тойже сессиеё как в table users так и в onlain, ведь в противном случае можно двоих людей сочти как одного в онлайне, и уж темболее авторизации двух пользователей как одного в момент захода на сайт одного из них.

06 Янв 2012, 16:29
san

MaikL, я сижу в сети с ноутбука, домашнего пк, рабочего пк и телефона. Причем не просто сижу, я могу сидеть на работе с пк, потом взять ноут и пойти на кухню, а потом взять телефон и пойти в туалет. Мне с твоей паранойей придется каждый раз релогиниться
Чем проще - тем лучше. Всеми этими танцами с бубном ты забрал у себя несколько часов жизни и заберешь кучу нервов у своих пользователей, которые будут срать кирпичами и ты в итоге вернешься к обычному способу аутентификации, знаем, проходили.
Ты это время лучше бы потратил на прикручивание openid

06 Янв 2012, 18:21
MaikL

san, Знал что такой вопрос возникнет рано или поздно, но я и это предусмотрел. Скажем в твоём случае тоже всё легко просто без нужды постоянной авторизации.
Телефон твой личный, а значит там смело можно оставлять куки пароля и логина, думаю на личном ноутбуке тоже можно, собственно как и на домашнем пк(если конечно доверяешь данные семье и нечего скрывать).
А вот с рабочим не спорю, там куки пароя с логином не сохранишь дабы мало ли кто будет шариться, но это и необязательно, там прийдёться лищь раз авторизироваться отметив что комп чюжой, и этого вполне достаточно, учитывая как ты говоришь что временно выходя в туалет ты заходишь с телефона! Сессия живет столько времени, сколько ты сам пожелаешь (скажем указав в настройках сколько времени она будет жива). С телефона будешь заходить по кукам логина и пароля, если при этом сессия ещё жива, то уже имеющаяся сессия будет браться из бд и просто обнавляться в онлайне тем самым с каждым переходом она будет продливать себе жизнь, и ни какой смены сессии при этом не произойдёт, а значит снова вернувшись за рабочий комп он будет по прежнему авторизован лишь за счёт одной сессии. НО в случае если в течении её жизни не будет новых переходов, то по исходу времени она умрёт, и при любом следующем заходе она обязательно измениться.
Но также и присутствует самостоятельное убивание кук. Естественно куки умрут лишь на том устройстве где был нажат выход с сайта, но сессия при этом останеться жива в БД сайта до своей кончины.
добавлено спустя 9 минут:
san, так чем же всётаки плох такой метод аутентификации(как ты называешь)?

06 Янв 2012, 21:25
san

За пароль в куках надо давать веслом по шее
Малейшая xss и какерам даже напрягаться не надо с радугами.
А метод плох тем, что на 15" мониторе твое описание заняло 11 строк текста. Вместо того, что бы занимать 1-2 строки. В этом и есть главный трабл, ты слишком паришься над мнимой безопасностью в итоге забыв про удобство пользования. К тому же если твоя система так хороша, то почему ее давно не юзают в web?

06 Янв 2012, 21:58
Ответить на тему