Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Аутентификация пользователей

332
10 марта 2006 года
Valiant
416 / / 27.09.2004
как лучше сделать аутентификацию пользователя на PHP ???

у меня в базе храняться
логины и пароли пользователей
мне надо их оттуда выскрести и сранить с введённым
в форму (вот тут то и проблема)
я сравниваю при помощи цикла
и каждый раз он мне пишет что тра та та логин или не верный пока не находит правильный
как этого избежать ???
может можно обойтись без цикла ???
2
10 марта 2006 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Valiant
как лучше сделать аутентификацию пользователя на PHP ???

у меня в базе храняться
логины и пароли пользователей
мне надо их оттуда выскрести и сранить с введённым
в форму (вот тут то и проблема)
я сравниваю при помощи цикла
и каждый раз он мне пишет что тра та та логин или не верный пока не находит правильный
как этого избежать ???
может можно обойтись без цикла ???


если логины и пароли храняться в базе, зачем их выбирать в цикле?? :o

select password from auth_table where user=blabla;

нельзя сделать? кроме того - лучше в базе хранить хэш пароля, а не сам пароль. например в md5

332
10 марта 2006 года
Valiant
416 / / 27.09.2004
решил сделать так:
Код:
function auth ($login, $pass){     
if (!isset($_REQUEST['doGo']))
  include ('auth_face.txt');
  $mysql_host  = "localhost";
  $mysql_user  = "Valiant";
  $mysql_passw = ":D";
  $mysql_db    = "pgups"; mysql_connect($mysql_host,$mysql_user,$mysql_passw) or die ("Can't connect " .mysql_error());    
mysql_select_db("$mysql_db")or die ("Data Base not connected" .mysql_error());
    if (isset($login))     
$my_Query_1= mysql_query(
"SELECT * FROM `users` WHERE `db_login` = '$login' AND `db_password` = '$pass'"
) or die ("Invalid user or password" .mysql_error());

самый главный вопрос что вставить сюда
 
Код:
if  ($my_Query_1 == "true")     {       include('admin\skins\default\admin_face.txt');      }  
else    {      
if (isset($login))  {
echo "<H1>Неправильное имя пользователя или пароль</H1>
"
;         
echo "";        }      
}
}
332
10 марта 2006 года
Valiant
416 / / 27.09.2004
Цитата:
Originally posted by squirL
кроме того - лучше в базе хранить хэш пароля, а не сам пароль. например в md5


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

2
10 марта 2006 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Valiant
решил сделать так:
 
Код:
$my_Query_1= mysql_query(
"SELECT * FROM `users` WHERE `db_login` = '$login' AND `db_password` = '$pass'"
) or die ("Invalid user or password" .mysql_error());


!!!???? тяжко... еще раз:

 
Код:
select db_password from users where db_login=$login;

запрос должен быть такой и только такой. то что написано в твоем коде - бред, уж извини.
я не силен в PHP, но я так понимаю, что в $my_Query_1 будет лежать результат выполнения запроса? ну так и сравнивай его с тем, что получил из формы в $pass.

кстати, если база используется только для аутентификации, т. е. там только логин и пароль, не вижу смысла в тяжеловесном SQL хранилище. хватило бы DBM хэшей.
2
10 марта 2006 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Valiant
привык о безопасности думать
чуть позднее выполнения работающего кода
ведь добавить пару функций не так уж и сложно


ну флаг в руки. хозяин - барин, как говориться

332
10 марта 2006 года
Valiant
416 / / 27.09.2004
из базы на данный момент я хаваю только эти данные
там ещё полно различных данных просто именно сейчас мне надо именно эти поля
332
10 марта 2006 года
Valiant
416 / / 27.09.2004
Всё равно что то не так
в этой строчке:
"select db_password from users where db_login=$login"
он мне такую страшную сабжу выдаёт:
Unknown column 'Тра-та-та' in 'where clause'
2
10 марта 2006 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Valiant
Всё равно что то не так
в этой строчке:
"select db_password from users where db_login=$login"
он мне такую страшную сабжу выдаёт:
Unknown column 'Тра-та-та' in 'where clause'


ты знаком с SQL вообще? тяжело понять, что это значит?

583
10 марта 2006 года
#define
150 / / 03.12.2002
Походу Valiant опять не понял насчет запроса.. тут уже ничего не попишешь.

Соц. опрос - как считаете лучше хранить в БД логин+md5(пароля) или md5(логин+пароль)? Во-втором случае даже тот, у кого есть доступ к базе не сможет узнать зарегистрированные логины, да и мста в БД меньше занимает такой подход. Есть ли негативные стороны? Запросы типа '.. WHERE login=:LOGIN' не в счет, для этого есть ID'ы.

И еще мысль - стоит ли делать такое поле (хэш от логина+пароль) уникальным - знаю что могут возникнуть ситуации когда разные строки будут давать одинаковый хэш (хотя это и очень маловероятно).
332
10 марта 2006 года
Valiant
416 / / 27.09.2004
сцрать ф каментах йа могу то же ...
вы лучше толковым советом помогите
332
10 марта 2006 года
Valiant
416 / / 27.09.2004
сцрать ф каментах йа могу то же ...
вы лучше толковым советом помогите
2
10 марта 2006 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Valiant
сцрать ф каментах йа могу то же ...
вы лучше толковым советом помогите


я тебе уже все сказал. если ты не понимаешь, что такое
unknown column и подставил мой запрос без изменений под свою базу - советы тебе не помогут.

332
10 марта 2006 года
Valiant
416 / / 27.09.2004
посмотри пару сабжей выше и поймёшь

хотя вот запрос
"select `db_password` from `users` where db_login= $login"
ты попрежнему считаешь что он не изменился ???
2
10 марта 2006 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Valiant
посмотри пару сабжей выше и поймёшь

хотя вот запрос
"select `db_password` from `users` where db_login= $login"
ты попрежнему считаешь что он не изменился ???


SQL запрос АБСОЛЮТНО не изменился. если ты сможешь доказать обратное - вперед.

332
15 марта 2006 года
Valiant
416 / / 27.09.2004
SELECT db_login, db_password FROM `users` WHERE db_login='$login'
вот запрос который у меня заработал
так как мне надо
код ниже приводить не имеет смысла
2
15 марта 2006 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Valiant
SELECT db_login, db_password FROM `users` WHERE db_login='$login'
вот запрос который у меня заработал
так как мне надо
код ниже приводить не имеет смысла


а чем он отличается от моего принципиально, кроме того, что непонятно зачем делается выборка поля db_login?

332
15 марта 2006 года
Valiant
416 / / 27.09.2004
Цитата:
Originally posted by squirL
а чем он отличается от моего принципиально, кроме того, что непонятно зачем делается выборка поля db_login?


начнём заново ...
у меня есть два поля
логин и пасс мне нужно по логину найти пасс
после чего мне надо сравнить пасс из базы и пасс введённый пользователем
если это можно сделать как то иначе, то подскажи ...

2
15 марта 2006 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Valiant
начнём заново ...
у меня есть два поля
логин и пасс мне нужно по логину найти пасс
после чего мне надо сравнить пасс из базы и пасс введённый пользователем
если это можно сделать как то иначе, то подскажи ...


блиннн... ты что вообще не читаешь то что тебе писали????

еще раз и по слогам, пошагово:

1. считываешь из формы пароль и логин
2. предположим, что логин и пароль считаны в переменные db_login и db_pass
3. выполняешь запрос
select db_pass from `users` where db_login=$db_login
4. я не знаю PHP, но обычно результат запроса возращается в какой то массив или переменную например @query ($query)
делаешь сравнение $query и $db_pass полученный из формы.
ВСЕ.
теперь внятно обясни, зачем извлекать в запросе к базе поле с паролем и чем тебе не подошел предложенный мной SQL запрос.

332
15 марта 2006 года
Valiant
416 / / 27.09.2004
согласен и так как ты предлагаешь работает
но существенно это ничего не меняет
по 50000 авторизаций в минуту у меня проходить не будет, да и загрузка базы вообще не существенная
а потом уже будет проходить заточка кода
2
15 марта 2006 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Valiant
согласен и так как ты предлагаешь работает
но существенно это ничего не меняет
по 50000 авторизаций в минуту у меня проходить не будет, да и загрузка базы вообще не существенная
а потом уже будет проходить заточка кода


хы хы... у тебя наверное и поле db_login в базе текстовое? поверь, лучше сразу сделать как надо, чем потом иметь себе мозги... проверено на собственном горьком опыте.

332
15 марта 2006 года
Valiant
416 / / 27.09.2004
Вот с этим то же вопрос
какое поле лучше сделать ???
2
15 марта 2006 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Valiant
Вот с этим то же вопрос
какое поле лучше сделать ???


лучше сделать числовое поле USER_ID и сделать отдельную таблицу с соответствием USER_ID и db_login.

12
15 марта 2006 года
alekciy
3.0K / / 13.12.2005
ВотЬ ведь у народа проблемы то какие... жуть!
Видимо только у такого идиота как я проблем не возникает)))

Лично я делаю так. Есть у меня БД с никами и пасами хранящаясь в XML (естесТено доступ к БД только меня любимого да ещё и скрипта, который является движком сайта). Потом беру самописную функцийку и делаю из этой БД выборку. Получаю два индексных массива. В одной все ники сайта, в другом пароли. Беру из куков пользователя его ник и пас. В первом массиве ищем ник, во втором пасс. НО! даже если и ник и пасс в БД найдены, это не значит, что мы пользователя авторизуем. Ни в коем случае! А вдруг пасс из куков найдется во втором массиве, но он не соответствует текущему нику (тому, который через куки пришел). Поэтому заключительная часть проверки: сравнение ключей этих двух массивов. Если индекст из массива ников равен индексу из массива пассов, то только в этом случае мы можем быть уверены, что присланая пара ник-пасс из кукиксов соответствует такой же паре ник-пасс из БД.
Хотя это не значит, что я пытаюсь умолить роль SQL. Просто в текущем проект решил использовать БД XML. Для тренировки, так сказать.
1.9K
16 марта 2006 года
kasap
168 / / 07.04.2005
Цитата:
Originally posted by Valiant
решил сделать так:
Код:
function auth ($login, $pass){     
if (!isset($_REQUEST['doGo']))
  include ('auth_face.txt');
  $mysql_host  = "localhost";
  $mysql_user  = "Valiant";
  $mysql_passw = ":D";
  $mysql_db    = "pgups"; mysql_connect($mysql_host,$mysql_user,$mysql_passw) or die ("Can't connect " .mysql_error());    
mysql_select_db("$mysql_db")or die ("Data Base not connected" .mysql_error());
    if (isset($login))     
$my_Query_1= mysql_query(
"SELECT * FROM `users` WHERE `db_login` = '$login' AND `db_password` = '$pass'"
) or die ("Invalid user or password" .mysql_error());

самый главный вопрос что вставить сюда
 
Код:
if  ($my_Query_1 == "true")     {       include('admin\skins\default\admin_face.txt');      }  
else    {      
if (isset($login))  {
echo "<H1>Неправильное имя пользователя или пароль</H1>
"
;         
echo "";        }      
}
}



mysql_passw = "";

Как это Вообще работает? Даже ковычки не экранированы...

332
16 марта 2006 года
Valiant
416 / / 27.09.2004
Цитата:
Originally posted by kasap
mysql_passw = "";

Как это Вообще работает? Даже ковычки не экранированы...



как как да никак это смайл

12
16 марта 2006 года
alekciy
3.0K / / 13.12.2005
Цитата:
Originally posted by Valiant
как как да никак это смайл


Так он не о том... он о том, что вообще-то внутри "...." все " положено экранировать через \", а иначе работать то не будет!

332
17 марта 2006 года
Valiant
416 / / 27.09.2004
что экранировать ???
пароль к базе данных ???
12
17 марта 2006 года
alekciy
3.0K / / 13.12.2005
Цитата:
Originally posted by Valiant
что экранировать ???
пароль к базе данных ???


Уууу... как же все запушено-то... матчасть то учим...

$mysql_passw = "";

PHP парсер считает, что в переменной $mysql_pass записано <img src=, т.е. данные до закрывающийся двойной кавычки. Если же внутри строки есть двойные кавычки, то для того, что бы сказать парсеру, что двойные кавычки это часть данныех, а не окончание строки, ставят экранирующий символ. Т.е. корректный код должен быть таким:

$mysql_passw = "<img src=\"images/smilies/icon_9.gif\" border=\"0\" alt=\"\">";

А вообще-то в данном случае лучше применить одинарные кавычки (в этом случае парсеру пофиг, какие данные внутри строки находяться. Хотя если там есть одинарная кавычка, то её придется экранировать).

$mysql_passw = '';

332
17 марта 2006 года
Valiant
416 / / 27.09.2004
вот где запущено
про кавычки я и без тебя знаю
но я же не буду на весь форум трубить про свой пароль к базе ... логика ???
да и потом я же написал что тут должен быть смайл форума который я сам туда умышленно поставил
а форум между тегами [<php>][</php>] вместо того что бы поставить смайл написал ссылу на смайл


всё считаю тему пора закрывать а то ещё кто чего не так поймёт и пошлёт меня учить матчасть
17K
21 марта 2006 года
a_[w]
5 / / 21.03.2006
 
Код:
$f = mysql_fetch_array(mysql_query('SELECT count(`id`) as cnt FROM `users` WHERE `login`="'.addslashes(trim($_POST['login'])).'" AND `password`="'.addslashes(trim($_POST['password'])).'";'));
if(intval($f['cnt'])){
    echo 'You are logged in!';
}else{
    echo 'You are sux!';
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог