Вообщем написал такой просто код авторизации на сайте
session_start();
if(isset($_POST['login'])){ $login = $_POST['login']; if($login == ''){ unset($login); }}
if(isset($_POST['password'])){ $password = $_POST['password']; if($password == ''){ unset($password); }}
if(empty($login) or empty($password)){
exit("Вы что то не ввели");
}
$login = htmlspecialchars($login);
$login = stripslashes($login);
$password = htmlspecialchars($password);
$password = stripslashes($password);
include("db.php");
$result = mysql_query("SELECT * FROM `users` WHERE `login`='$login'", $db);
$myrow = mysql_fetch_array($result);
if(empty($myrow['password']))
{
exit("Неверный логин или пароль");
}
else {
if($myrow['password'] == $password){
$_SESSION['password'] = $myrow['password'];
$_SESSION['id'] = $myrow['id'];
echo "вы успешно вошли";
} else{
echo "ошибка";
}
}
пользователь удачно входит по своему логину и паролю, но стоит только закрыть, обновить или перейти на другую страницу ему снова нужно проходить заново авторизацию, что нужно добавить что бы авторизация сохранялась?
Другие языки программирования и технологии
Помогите с авторизацией на PHP
юзай куки или сессии
Я заманался твой код форматировать! Ты сам-то можешь разобрать логику программы, когда код идёт сплошняком вроде if(isset($_POST['login'])){ $login = $_POST['login']; if($login == ''){ unset($login); }}? Ты что, на PHP с перла перешёл?
И запомни, здесь все отступы убираются, размещай код на pastebin.
Итак.
Во-первых, переменные $password и $login у тебя не определены, если у тебя не пришли данные через $_POST. То, что ты запустил сессию, не значит, что из неё не нужно брать данные.
Вот это
if (isset($_POST['password']))
{
$password = $_POST['password'];
if ($password == '')
unset($password);
}
замени на
if (isset($_POST['password']) && !empty($_POST['password']))
$password = $_POST['password'];
Зачем писать лишний код?
$login = stripslashes(htmlspecialchars($login));
Так тоже короче. И ещё тут будет ошибка если через $_POST ничего не пришло, ты забыл это учесть
$password = htmlspecialchars($password);
$password = stripslashes($password);
Вот это ты нафига делаешь? Зачем ты пароль в базе в открытом виде хранишь и почему вырезаешь из него часть символов? Может быть, вообще оставим в пароле только буквы a и b, и чтобы они встречались не чаще одного раза? Ты понимаеншь, что ты уменьшаешь криптостойкость пароля? Ты делаешь htmlspecialchars, ты собрался пароль в браузер отдавать что ли? Для твоих целей есть mysql_real_escape_string. Кстати, сейчас вроде mysql_* устарели, нужно пользоваться mysqli_*
Делай так:
if (isset($password)) $password = hash('sha512', $password);
else $password = '';
затем не нужно выдёргивать данные из базы и сравнивать нужное поле с паролем, делай сразу
SELECT * FROM `users` WHERE `login`='$login' AND `password` = '$password'
Ну ты как первый раз sql увидел.
И в самом начале можешь сделать if (!isset($_SESSION['id']) && isset($_POST['login'], $_POST['password'])), чтобы вся эта фигня работала только для незалогиненных пользователей, которые прислали данные на авторизацию. И везде, где надо, проверяй $_SESSION['id']
exit("Вы что то не ввели");
-то, -либо, -нибудь. Пользователи не любят, когда разработчик сайта глупее их самих.
Если у тебя это реальный файл авторизации, нужно всё поменять. Заверни всё это дело хотя бы, например, в функцию и делай не exit и echo (кстати, почему ты их чередуешь? ) , а return или даже throw new exception
И запомни, здесь все отступы убираются, размещай код на pastebin.
Итак.
Во-первых, переменные $password и $login у тебя не определены, если у тебя не пришли данные через $_POST. То, что ты запустил сессию, не значит, что из неё не нужно брать данные.
Вот это
if (isset($_POST['password']))
{
$password = $_POST['password'];
if ($password == '')
unset($password);
}
замени на
if (isset($_POST['password']) && !empty($_POST['password']))
$password = $_POST['password'];
Зачем писать лишний код?
$login = stripslashes(htmlspecialchars($login));
Так тоже короче. И ещё тут будет ошибка если через $_POST ничего не пришло, ты забыл это учесть
$password = htmlspecialchars($password);
$password = stripslashes($password);
Вот это ты нафига делаешь? Зачем ты пароль в базе в открытом виде хранишь и почему вырезаешь из него часть символов? Может быть, вообще оставим в пароле только буквы a и b, и чтобы они встречались не чаще одного раза? Ты понимаеншь, что ты уменьшаешь криптостойкость пароля? Ты делаешь htmlspecialchars, ты собрался пароль в браузер отдавать что ли? Для твоих целей есть mysql_real_escape_string. Кстати, сейчас вроде mysql_* устарели, нужно пользоваться mysqli_*
Делай так:
if (isset($password)) $password = hash('sha512', $password);
else $password = '';
затем не нужно выдёргивать данные из базы и сравнивать нужное поле с паролем, делай сразу
SELECT * FROM `users` WHERE `login`='$login' AND `password` = '$password'
Ну ты как первый раз sql увидел.
И в самом начале можешь сделать if (!isset($_SESSION['id']) && isset($_POST['login'], $_POST['password'])), чтобы вся эта фигня работала только для незалогиненных пользователей, которые прислали данные на авторизацию. И везде, где надо, проверяй $_SESSION['id']
exit("Вы что то не ввели");
-то, -либо, -нибудь. Пользователи не любят, когда разработчик сайта глупее их самих.
Если у тебя это реальный файл авторизации, нужно всё поменять. Заверни всё это дело хотя бы, например, в функцию и делай не exit и echo (кстати, почему ты их чередуешь? ) , а return или даже throw new exception
Кароче, удали код и перепиши заново с позиции ооп, быстрее будет и глюков меньше
Похожие вопросы
- помогите снова :D по php
- Помогите пожалуйста, проблема с php и html
- нужна помощь в написани php кода для создания авторизации пользователя и регистрации
- Как называется функция php, которая запоминает авторизацию на сайте?
- Авторизация php
- Форма авторизации и права. PHP
- Помогите со скриптом авторизации и регистрации пользователей на сайте через БД
- С какого языка начинать изучения программирования Pascal/PHP/Python?
- Помогите с stile.css или core.php
- Программирование. Помогите разобраться с направлениями (Ruby, Java, JavaScript, С++, Python, PHP, QA)