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

Ваш аккаунт

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

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

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

Problem с авторизацией

13K
08 марта 2007 года
Mayc
38 / / 01.02.2007
Пишу скрипт авторизации, смысл и алгоритм чего соотв. понятен. Но не могу понять, почему то логиниться не хочет человек т.е. я=)
Вот код
Код:
require("class.php");
@$username=$_POST['username'];
@$password=$_POST['password'];
 if (isset($username, $password))
  {
    $password=addslashes($password);
    //$username=htmlspecialchars(trim(addslashes($username)));
    //$password=htmlspecialchars(trim(addslashes($password)));
    //$password=md5($_POST['password']);
    $sql->db_connect();
    $sql->db_select("users","userID,name,password","name='".$username."' and password='".md5($password)."'");
    $sql->db_Fetch();
    $rows=$sql->db_rows();
     if ($rows !=1)
     {
       echo "Такого пользователя нет!";   
     }else
     {
       session_start();
       $_SESSION['name']=$username;
       echo "Вы вошли как:".$_SESSION['name'];
     }
   
  }else
  {
    $func->login_form();
  }

Вывел для проверки данные из бд юзверя определенного и вывел вводимые данные и результат меня удивил
 
Код:
Name:Microsoft
Pass:5f532a3fc4f1ea4
Такого пользователя нет!
---------------------------------
Your name:Microsoft
Your pass:5f532a3fc4f1ea403f37070f59a7a53a

Кто-нить расскажет почему так происходит?Уже незнаю где копать
13K
09 марта 2007 года
Mayc
38 / / 01.02.2007
С проблемой разобрался, надо было расширить кол-во символов в таблице(бд) до 32 символов, а у меня ограничение стояло в 15.
Кто сможет обьяснить, почему именно 32 символа кодировка занимает?
860
09 марта 2007 года
Abell2000
138 / / 15.01.2003
Потому что md5 возвращает 128 битное представление или 32-значное шестнадцатеричное число,
вот от куда 32 символа лимит.
13K
09 марта 2007 года
Mayc
38 / / 01.02.2007
А обрезать md5 никак нельзяда?
8
09 марта 2007 года
mfender
3.5K / / 15.06.2005
Непонятно вот это:
 
Код:
@$username=$_POST['username'];
@$password=$_POST['password'];
 if (isset($username, $password)){....}

Проверка в данном случае не имеет смысла, т.к. и $username и $password будут в любом случае инициализированны.

Цитата:

А обрезать md5 никак нельзяда?


substr();

274
09 марта 2007 года
Lone Wolf
1.3K / / 26.11.2006
Обрезать md5??? а может лучше сразу обрезать пароль до одного символа? и пусть все пароли что начинаються с S. например будут, считаться одним паролем!
13K
10 марта 2007 года
Mayc
38 / / 01.02.2007
Цитата: mfender
Непонятно вот это:
 
Код:
@$username=$_POST['username'];
@$password=$_POST['password'];
 if (isset($username, $password)){....}

Проверка в данном случае не имеет смысла, т.к. и $username и $password будут в любом случае инициализированны.


substr();



не помогает

Цитата: Lone Wolf
Обрезать md5??? а может лучше сразу обрезать пароль до одного символа? и пусть все пароли что начинаються с S. например будут, считаться одним паролем!


Ты этим чё хотел сказать?Умный чтоли?

8
10 марта 2007 года
mfender
3.5K / / 15.06.2005
Цитата:
не помогает


Что именно не помогает?
Ты ж записываешь слово, обработанное md5 в БД. Соответственно, и проверять нужно такое же слово, обработанное md5. Зачем что-то резать? С паролями всё очень просто: ограничиваешь длинну, скажем, до 8-ми символов [A-Za-z0-9] и всё. Больше и не надо. А если кто-то не в состоянии придумать себе пароль, то придумывай им его сам:

 
Код:
$sql->db_insert("users", "password", "password=".md5($pass = substr(rand(10000000, 99999999), 0, 8)));

(Примерно так, я не знаю, чем ты там пользуешься для работы с БД, поэтому по аналогии с db_select написал).
Соответственно, в БД будет храниться зашифрованная строка, а значение переменной $pass отдашь юзерю.
13K
10 марта 2007 года
Mayc
38 / / 01.02.2007
Да у меня класс целый ,с полной обработкой ошибок, для работы с бд.Неохота код писать один и тот же по тысяче раз.Да и вообще решил на ООП перейти, вот и воплощаю мечту в жизнь.
А придумывать пароль самому смысла не вижу, проще вообще не региться, т.к. человек его сам забудет. Я просто поставил ограничение в 15 символов(т.к. длина от 5 до 15) и если массив $_POST отсутствует, то отправляем в баню юзера.
92
10 марта 2007 года
Тень Пса
2.2K / / 19.10.2006
Цитата: Mayc
Ты этим чё хотел сказать?Умный чтоли?



нет. не это он имел ввиду, это ты вопрос не правильно задал.

md5-хэш даже 1го символа все равно будет строчкой, длина которой 32 симовла, и смысле обрезать хэш ни автор поста (на который ты так обозлился :)), ни я, не вижу.

PS: ограничение поставленное в БД касается именно хэша, а не пароля, который вводит пользователь (если я тебя правильно понял у тебя ограничение именно на пароль от 5 до 15ти символов?). ограничивать длину пароля надо скриптом ) или самый глупый вариант - записывать тупо и прямо пароль в БД. тогда ограничение на поле "пароль" сканает =)

в общем как-то так.

15
10 марта 2007 года
shaelf
2.7K / / 04.05.2005
2Mayc Не грубим. Ответил не то, промолчи или вежливо поправь. Глядя на твой код 95% форума могло тоже сказать. Сходи по этому аддресу и почитай о правилах кодирования. http://pear.php.net/manual/ru/standards.php
13K
11 марта 2007 года
Mayc
38 / / 01.02.2007
Ограничение стоит с базе 32 символа(раньше стояло 20 вроде), и в скрипте проверяю длину пароля, в рамках от 5 до 15.
За то, что разьяснил про хэш, огромное спасибо тебе!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог