PHP

Помогите с авторизацией

Учусь PHP. Решаю задачу "Создать свой кабинет".
Обработчик регистрации сделал. В базу пишет. В базе 5 полей.
Надо при вводе пары Логин/Пароль выдавал все поля по этой строке.
Не слушай никого.
Мемкеш для тебя - из пушки по воробьям. Тебе бы работу с БД осилить, а не хайлоад пилить,
Тем более, что сравнивать ассоциативный массив (существующй только в исполняемом скрипте) с внешним хранилищем вообще некорректно.
Объекты тоже не надо пытаться рисовать - только дров наломаешь.
function.mysql-real-escape-string.php давным давно устарела.
Такое ощущение, что некоторые тут не другим помогают, а просто пишут набор умных слов, чтобы посолиднее выглядеть.

Тебе надо всего несколько вещей.
Во-первых, научиться работать с mysql. В смысле освоить базовые запросы.
К примеру, не запрашивать из таблицы только одно поле, если нужны все.

Во-вторых, научиться работать с БД из РНР. Вот это вот всё mysql_query("SELECT UserID FROM users WHERE login='$login' AND password='$password'"); - это Содом и Гоморра.
Использовать надо по крайней мере PDO. И НИКОГДА не передавать пееменные в запрос напрямую, а только через подстановки:

$stmt = $pdo->prepare("SELECT * FROM users WHERE login=?");
$stmt->execute(array($login));
$user = $stmt->fetch();
if (!$user OR $user['password'] != $password) {
exit ("Извините, введённый вами логин или пароль неверный. ");
}

В-третьих, научиться работать с сессиями.
В частности перед обращением к $_SESSION сессию надо стартовать.

В-четвертых, пароль надо хэшировать, с помощью
http://php.net/manual/ru/book.password.php
Александр Орлов
Александр Орлов
1 157
Лучший ответ
Запрос чоле?
SELECT * WHERE login = "login"
Олег Быков
Олег Быков
67 927
Mikhail Kim $ забыл.

В '$login' можно отправить закомментированную строку, валидную с точки зрения SQL и сформировать зловредный запрос с инъекцией нужной нагрузки.

Должно быть экранирование и фильтрация входных данных

http://php.net/manual/ru/function.mysql-real-escape-string.php
1) $_SESSION['password']=$password никогда так не делай.
Зачем в сессию это сохранять? Логику можешь объяснить.
И пароль в открытом виде хранишь, да?
2) Вместо ассоциативного массива используй сериализуемые объекты + key-value хранилище (MemCached)
3) mysql_query НЕ НУЖНО ИСПОЛЬЗОВАТЬ, читать авторы твоего учебника не умеют. Используй PDO или лучше сразу IdiORM, который поверх PDO написан.
Отправь им ссылку, пусть глаза разуют http://php.net/manual/ru/function.mysql-query.php

http://ruhighload.com/post/Php+memcache+sessions
http://php.net/manual/ru/oop4.serialization.php
http://stackoverflow.com/questions/5514961/using-session-variable-with-objects
Иван Беляев
Иван Беляев
8 955