Авторизация пользователя (PHP)
сделал функцию добавления пользователей в базу:
Код:
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 "Вы не ввели одно или несколько из обязательных полей!";
}
$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 хэш пароля
подскажите как на основе этих данных сделать авторизацию пользователя. заранее спасибо.
Я делал так: все данные (логин, пароль и пр.) заношу в массив и делаю implode
Достаю аналогично: читаю файл, перевожу строку в массив через explode а дальше - работа с записями массива.
Удачи! Если не разберешься - приведу код.
хотелось бы на код взглянуть, уже по нему вопросы задать, если что то не понятное будет :)
Код:
$fp = fopen("user.txt", "r");
$txt = fread($fp, filesize("user.txt"));
fclose($fp);
list( $login, $pass ) = explode(":", $txt);
$txt = fread($fp, filesize("user.txt"));
fclose($fp);
list( $login, $pass ) = explode(":", $txt);
Код:
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 "Вы не ввели логин или пароль!";
}
$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 "Вы не ввели логин или пароль!";
}
так правильно?
а теперь второе: а если пользователей в файле миллион - так и будете весь файл в память пейсать и гонять по массиву?
Понимаю, что ты клонишь в сторону Мускуля, но на стадии изучения ПХП миллион юзеров просто не может быть.
на стадии изучения чего угодно, нужно думать также об масштабируемости, абстракции и инкапсуляции. иначе всё изучение поёдёт коту под хвост и закончится писаниной недалёких индивидуально-ориентированных PHP-скриптов с мешаниной HTML+JavaScript, которые тяжело понимать, и практически невозможно применить на практике в другом месте, кроме того, для которого это писалось.
в данной ситуации я бы написал некий абстрактный класс для dataset'а. А уж откуда будут бораться данные - из файла, из БД, из XML - дело второе и регулируется работой наследников родителя.
с помощью сессий или кукисов?
Цитата: Sash1k
а как индентифицировать пользователя, пользователя после успешной аторизации?
с помощью сессий или кукисов?
с помощью сессий или кукисов?
можно и так и сяк. PHP-сесии используют те же куки на клиентах.
Цитата: mfender
можно и так и сяк.
а с точки зрения безопасности что лучше?
Другой вопрос, что не все браузеры поддерживают сессии (в Opera была у меня такая проблема), а Cookie могут отключаться в настройках пользователем
мой плюшевый дрюк! люди, которые отключают куки в браузере - вредят только себе. Иначе говоря: сами виноваты. На них даже не нужно ориентировать сайты.
Цитата: frosty
Другой вопрос, что не все браузеры поддерживают сессии (в Opera была у меня такая проблема), а Cookie могут отключаться в настройках пользователем
Opera как раз нормально держит сессии, просто у неё по другому устроено назначение времени жизни cookie
Код:
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 "Авторизация пройдена!";
}
}
}
$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() ?
А ман почитать слабо или религия не позволяет? Там даже целый раздел на эту тему есть... К тому же если не знаешь какую из этих функций использовать и мануал противен, то просто попробывать сложно? Ты же наконец не бомбу разминируешь и от неправильной функции ничего не взорвётся!
вот меня и интересует как защититься от таких хаков?..
P.S. неужели здесь только теоретики :(
во вторых, чтобы еще более обезопасится, можно сохранять айпишник в БД, если пользователь выбрал "запомнить".
Код:
{
$login = $q[0];
$password = $q[1];
$_SESSION['login'] = $login;
$_SESSION['pass'] = $password;
echo "Авторизация пройдена!";
}
$login = $q[0];
$password = $q[1];
$_SESSION['login'] = $login;
$_SESSION['pass'] = $password;
echo "Авторизация пройдена!";
}
и встроить на каждой странице проверку данных в сессии и в базе пользователей?
Free Thinker, в какой БД айпишник сохранять??
А для чего пароль хранить на протяжении сеанса? Или ты хочешь проверять логин/пароль при каждой загрузке странички?
а смысл вообще хранить какие-то сведения о пользователе у пользователя? PHPSESSID является нормальным идентификатором пользователя.. а злоумышеннику будет достаточно проблематично узнать сессид другого юзера, чтобы подменить свой)