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

Ваш аккаунт

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

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

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

Авторизация пользователя (PHP)

930
24 января 2008 года
Sash1k
115 / / 27.04.2007
пишу свою маленькую CMS на txt файлах и возникла такая проблема.
сделал функцию добавления пользователей в базу:
Код:
if ($_POST["login"] != "" && $_POST["password1"] != ""){
    $cryptpass = md5($password1);
    $list = array("$login", "$cryptpass", "\n");
    $listed = implode("::", $list);
    $fp = fopen("db/user.txt", "a+");
    fwrite($fp, $listed);
    fclose($fp);
    echo "Регистрация завершена!</a>";
} else {
    echo "Вы не ввели одно или несколько из обязательных полей!";
}

содержимое файла user.txt получается:
 
Код:
имя пользователя:мд5 хэш пароля

подскажите как на основе этих данных сделать авторизацию пользователя. заранее спасибо.
325
24 января 2008 года
Franky
723 / / 10.08.2005
привет, брат по файлам! :)
Я делал так: все данные (логин, пароль и пр.) заношу в массив и делаю implode
Достаю аналогично: читаю файл, перевожу строку в массив через explode а дальше - работа с записями массива.

Удачи! Если не разберешься - приведу код.
930
24 января 2008 года
Sash1k
115 / / 27.04.2007
хотелось бы на код взглянуть, уже по нему вопросы задать, если что то не понятное будет :)
271
24 января 2008 года
MrXaK
721 / / 31.12.2002
чё-нить такое:
 
Код:
$fp = fopen("user.txt", "r");
$txt = fread($fp, filesize("user.txt"));
fclose($fp);
list( $login, $pass ) = explode(":", $txt);
930
24 января 2008 года
Sash1k
115 / / 27.04.2007
вот получилось:
Код:
if ($_POST["login"] != "" && $_POST["password"] != ""){
    $cryptpass = md5("$password");
        $list = array("$login", "$cryptpass");
    $fp = fopen("db/user.txt", "r");
    $listed = fread($fp, filesize("db/user.txt"));
    fclose($fp);
    list($login, $cryptpass) = explode("::", $listed);     
    echo "Авторизация пройдена!";
} else {
    echo "Вы не ввели логин или пароль!";
}


так правильно?
8
25 января 2008 года
mfender
3.5K / / 15.06.2005
ребята, я думаю вы удивитесь, когда узнаете, что функция file() читает файл и каждый элемент возвращиемого массива является строкой файла.

а теперь второе: а если пользователей в файле миллион - так и будете весь файл в память пейсать и гонять по массиву?
325
25 января 2008 года
Franky
723 / / 10.08.2005
Понимаю, что ты клонишь в сторону Мускуля, но на стадии изучения ПХП миллион юзеров просто не может быть.
8
25 января 2008 года
mfender
3.5K / / 15.06.2005
а когда наступит стадия миллиона юзеров? переписывать двигло?

на стадии изучения чего угодно, нужно думать также об масштабируемости, абстракции и инкапсуляции. иначе всё изучение поёдёт коту под хвост и закончится писаниной недалёких индивидуально-ориентированных PHP-скриптов с мешаниной HTML+JavaScript, которые тяжело понимать, и практически невозможно применить на практике в другом месте, кроме того, для которого это писалось.

в данной ситуации я бы написал некий абстрактный класс для dataset'а. А уж откуда будут бораться данные - из файла, из БД, из XML - дело второе и регулируется работой наследников родителя.
930
25 января 2008 года
Sash1k
115 / / 27.04.2007
а как индентифицировать пользователя, пользователя после успешной аторизации?
с помощью сессий или кукисов?
8
25 января 2008 года
mfender
3.5K / / 15.06.2005
Цитата: Sash1k
а как индентифицировать пользователя, пользователя после успешной аторизации?
с помощью сессий или кукисов?


можно и так и сяк. PHP-сесии используют те же куки на клиентах.

930
25 января 2008 года
Sash1k
115 / / 27.04.2007
Цитата: mfender
можно и так и сяк.


а с точки зрения безопасности что лучше?

4.4K
25 января 2008 года
frosty
53 / / 24.09.2004
К безопасности это имеет мало отношения.
Другой вопрос, что не все браузеры поддерживают сессии (в Opera была у меня такая проблема), а Cookie могут отключаться в настройках пользователем
8
26 января 2008 года
mfender
3.5K / / 15.06.2005
мой плюшевый дрюк! люди, которые отключают куки в браузере - вредят только себе. Иначе говоря: сами виноваты. На них даже не нужно ориентировать сайты.
244
26 января 2008 года
UAS
2.0K / / 19.07.2006
Цитата: frosty
Другой вопрос, что не все браузеры поддерживают сессии (в Opera была у меня такая проблема), а Cookie могут отключаться в настройках пользователем


Opera как раз нормально держит сессии, просто у неё по другому устроено назначение времени жизни cookie

930
26 января 2008 года
Sash1k
115 / / 27.04.2007
переписал авторизацию с использованием функции file:
Код:
if ($_POST["login"] != "" && $_POST["password"] != ""){
    $file = file("db/user.txt");
    for ($i=0; $i<count($file); $i++){
        $q = explode("::", $file[$i]);
        if ($q[0] == $login && $q[1] == md5($password))
        {
            //код для запоминания авторизации.

            echo "Авторизация пройдена!";
        }
    }
}

теперь меня интересует код запоминания авторизации??
подскажите как там использовать setcookie() и session_start() ?
15
26 января 2008 года
shaelf
2.7K / / 04.05.2005
А ман почитать слабо или религия не позволяет? Там даже целый раздел на эту тему есть... К тому же если не знаешь какую из этих функций использовать и мануал противен, то просто попробывать сложно? Ты же наконец не бомбу разминируешь и от неправильной функции ничего не взорвётся!
930
26 января 2008 года
Sash1k
115 / / 27.04.2007
просто запихнуть пароль в кукисы дело одной строчки кода. но тогда с помощью банальной подмены кукисов можно войти под другим пользователем.
вот меня и интересует как защититься от таких хаков?..

P.S. неужели здесь только теоретики :(
11K
26 января 2008 года
Free Thinker
118 / / 16.03.2007
во первых, в кукисах ни в коем случае не сохраняем сам пароль, а хэш.
во вторых, чтобы еще более обезопасится, можно сохранять айпишник в БД, если пользователь выбрал "запомнить".
930
26 января 2008 года
Sash1k
115 / / 27.04.2007
то есть можно ограничиться вот этим кодом:
 
Код:
{
            $login = $q[0];
            $password = $q[1];
            $_SESSION['login'] = $login;
            $_SESSION['pass'] = $password;
            echo "Авторизация пройдена!";
        }

и встроить на каждой странице проверку данных в сессии и в базе пользователей?

Free Thinker, в какой БД айпишник сохранять??
15
26 января 2008 года
shaelf
2.7K / / 04.05.2005
А для чего пароль хранить на протяжении сеанса? Или ты хочешь проверять логин/пароль при каждой загрузке странички?
271
27 января 2008 года
MrXaK
721 / / 31.12.2002
а смысл вообще хранить какие-то сведения о пользователе у пользователя? PHPSESSID является нормальным идентификатором пользователя.. а злоумышеннику будет достаточно проблематично узнать сессид другого юзера, чтобы подменить свой)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог