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

Ваш аккаунт

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

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

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

Проблема авторизации

33K
25 февраля 2008 года
ex-em
8 / / 13.01.2008
Доброго времени суток, уважаемые! Я уже второй день теряюсь в догадках как решить эту задачу, хотя чувствую, что всё не так уж и сложно!
Проблема в следующем: когда пользователь регистрируется, пароль шифруется в md5, когда авторизуется, пароль тоже шифруется в md5, сравнивается, НО пароли отличаются!
К примеру, при регистрации пароль ASDF выглядит так: 912ec803b2ce49e4a541, а тот же пароль при авторизации выглядит уже вот так: 912ec803b2ce49e4a541[COLOR="Red"]068d495ab570[/COLOR]!!! В чём проблема, обьясните, пожалуйста и по возможности напишите правильный скрипт для авторизации (буду очень признателен) :(
8
25 февраля 2008 года
mfender
3.5K / / 15.06.2005
А откуда уверенность, что пароль при регистрации именно 912ec803b2ce49e4a541 ???

Мне видится, что это то, что записывается в базу данных. Поэтому очевидно, что проблема в размере поля для хранения пароля. Скорее всего там стоит varchar(20)
31K
25 февраля 2008 года
Yarosl@w
18 / / 23.01.2008
Согласне с mfender: очевидно в первый раз хеш md5 не весь записывается в БД, так как размер поля замал. Следовательно надо дать размер побольше(к примеру varchar(40)) обеим полям.
33K
25 февраля 2008 года
ex-em
8 / / 13.01.2008
Ааа, совсем об этом не подумал, дурья моя голова! Вы правы, mfender, Yarosl@w! Действительно писал varchar(20) ... Исправлять ничего не исправил в БД, но вот скрипт оптимизировал - теперь пароль шифруется в md5, потом лишние символы обрезаются и пользователь авторизуется ...

СПАСИБО БОЛЬШОЕ
92
25 февраля 2008 года
Тень Пса
2.2K / / 19.10.2006
Yarosl@w, надо сделать varchar(32) :) хэш md5 длиной всего 32 символа )

ex-em, вместо СПАСИБО, кликай mfender'у на весы :)
33K
28 февраля 2008 года
ex-em
8 / / 13.01.2008
Теперь возникла проблема с сессиями :( Извините, но больше мне не к кому обратиться за помощью ... Итак:
1) существует файл index.php, который ссылается на форму входа - entry.php;
2) entry.php в свою очередь задействует скрипт authorize.php;
3) скрипт проверяет введёные данные, сверяется с базой данных, начинает сессию и отправляет пользователя на content/index.php

вот листинг authorize.php:

Код:
<?php

$user = substr($_POST['nickname'], 0, 20);
$pass = substr($_POST['keyword'], 0, 20);
$newpass = substr(md5($pass), 0, 20);

 if (preg_match("/[^(\w)|(\x7F-\xFF)|(\s)]/", $user)) $user = "";
 if (preg_match("/[^(\w)|(\x7F-\xFF)|(\s)]/", $pass)) $pass = "";

    if ($user!=""&&$pass!="") {
     mysql_connect("localhost", "root", "") or die("could not connect");
     mysql_select_db("all_users_db");
     $result = mysql_query("SELECT nickname FROM user_table WHERE nickname = '".$user."'");

        if (mysql_num_rows($result) > 0) {
         $query = "select * from user_table";
         $result = mysql_query($query);
         while ($row = mysql_fetch_assoc($result)) {
         $username = $row["nickname"];
         $password = $row["keyword"];
         $number = $row["userID"];
         }
         
            if ($username==$user&&$password==$newpass) {
             ini_set("session.use_trans_sid", true);
             session_start();
             $_SESSION[] = "$user";
             $_SESSION[] = "$newpass";
             $_SESSION[] = "$number";
             header("Location: /content/index.php");
            }
            else    {
             header("Location: /entry.php?result=1");
             exit;
            }
        }
        else {
         header("Location: /entry.php?result=2");
         exit;
        }
    }
    else {
     header("Location: /entry.php?result=1");
     exit;
    }

?>


при открытии content/index.php проверяем существование $_SESSION, если её нет - пинаем на entry, если она есть - другие действия ... проблема в том, что $_SESSION нет ... ЧТО ИСПРАВИТЬ??? ПОДСКАЖИТЕ, ПОЖАЛУЙСТА!!! :o уже шестой час бъюсь на проблемой!!!

Конфиг php.ini:
session.save_handler = files
session.save_path = /tmp
session.use_cookies = 1
;session.cookie_secure =
; session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 100
session.gc_maxlifetime = 1440
session.bug_compat_42 = 1
session.bug_compat_warn = 1
session.referer_check =
session.entropy_length = 0
session.entropy_file =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 4
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fieldset="

чую при инициализации сессии ошибка, но в чём именно и где - не могу понять ...
33K
28 февраля 2008 года
ex-em
8 / / 13.01.2008
забейте, всё это useless
1.8K
29 февраля 2008 года
Валериус
190 / / 14.07.2006
Цитата: ex-em

session.save_path = /tmp


А у тебя есть права на запись в /tmp? И вообще, такая папка есть?

Да, вопрос странный, но если сервер под win, то проблема может быть именно в этом.

271
29 февраля 2008 года
MrXaK
721 / / 31.12.2002
там в мане на функцию header есть добавочка
Session ID is not passed with Location header even if session.use_trans_sid is enabled. It must by passed manually using SID constant.
хотя у тебя в конфиге написано, что сессия использует куку, но всё равно попробуй добавить SID к location..
ну и проверь не выводится ли чего до сессии... включи все ошибки... и ob_start() вначале попробуй))
33K
29 февраля 2008 года
ex-em
8 / / 13.01.2008
Цитата: Валериус
А у тебя есть права на запись в /tmp? И вообще, такая папка есть?

Да, вопрос странный, но если сервер под win, то проблема может быть именно в этом.



Я Денвер последний использую, копался на их форуме, нашёл проблему идентичную моей! причина была - отсутствие папки tmp. Папку такую создал, но сессии туда не пишутся - почему я не знаю! он пишутся в H:\Web\tmp ...

Цитата: Mr.Hacker
там в мане на функцию header есть добавочка
Session ID is not passed with Location header even if session.use_trans_sid is enabled. It must by passed manually using SID constant.
хотя у тебя в конфиге написано, что сессия использует куку, но всё равно попробуй добавить SID к location..
ну и проверь не выводится ли чего до сессии... включи все ошибки... и ob_start() вначале попробуй))


спасибо, попробую обязательно!

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог