При разработке интернет магазинов практически всегда требуется авторизация. Например, для входа в личный кабинет пользователя, или систему управления интернет-магазином.
Форма авторизации обычно состоит из двух текстовых полей (Логин и пароль) и кнопки Войти. Сейчас при создании в интернет-магазинах личного кабинета, набирает моду установка полей Телефон и Имя, или Имя и email, и другие комбинации. Но советуем так ни когда не делать, т.к. Имя можно написать по-разному, телефон тоже (84952322323 или 232-23-23).
PHP сессии
В этом уроке вы познакомитесь с правильной работой с сессиями на PHP.
Сессии нужны для сохранения определенной информации на стороне браузера. Практически тоже самое что и переменные, отличается только тем, что переменные при переходе на другую страницу сайта, или при обновлении текущей страницы теряют свои значения, а данные записанные в сессии сохраняются, и доступны на любых страницах сайта.
Например, на странице http://ox2.ru/index.php мы записали в сессию 'session_test' значение '123'. На странице http://ox2.ru/shop.php мы можем прочитать сессию session_test, и получить значение 123.
Для работы с сессиями на php нужно на каждой странице где будет производиться работа с сессиями написать session_start(), в самом начале, до вывода любой информации на экран.
Для записи в сессии существует переменная $_SESSION.
Например, простой пример:
Файл index.php будет запись в сессию:
<?php session_start(); $_SESSION["test"] = "Сессия - тест"; ?>
Файл session.php будет чтение сессии:
<?php session_start(); echo $_SESSION['test']; //На экране будет 'Сессия - тест' ?>
Вот в этом простом примере показана работа с сессиями.
Создание авторизации на PHP
Сейчас мы создадим пример авторизации. Основную функцию будет выполнять класс AuthClass.
Вот код с пояснением:
<?php session_start(); //Запускаем сессии /** * Класс для авторизации * @author дизайн студия ox2.ru */ class AuthClass { private $_login = "demo"; //Устанавливаем логин private $_password = "www.ox2.ru"; //Устанавливаем пароль /** * Проверяет, авторизован пользователь или нет * Возвращает true если авторизован, иначе false * @return boolean */ public function isAuth() { if (isset($_SESSION["is_auth"])) { //Если сессия существует return $_SESSION["is_auth"]; //Возвращаем значение переменной сессии is_auth (хранит true если авторизован, false если не авторизован) } else return false; //Пользователь не авторизован, т.к. переменная is_auth не создана } /** * Авторизация пользователя * @param string $login * @param string $passwors */ public function auth($login, $passwors) { if ($login == $this->_login && $passwors == $this->_password) { //Если логин и пароль введены правильно $_SESSION["is_auth"] = true; //Делаем пользователя авторизованным $_SESSION["login"] = $login; //Записываем в сессию логин пользователя return true; } else { //Логин и пароль не подошел $_SESSION["is_auth"] = false; return false; } } /** * Метод возвращает логин авторизованного пользователя */ public function getLogin() { if ($this->isAuth()) { //Если пользователь авторизован return $_SESSION["login"]; //Возвращаем логин, который записан в сессию } } public function out() { $_SESSION = array(); //Очищаем сессию session_destroy(); //Уничтожаем } } $auth = new AuthClass(); if (isset($_POST["login"]) && isset($_POST["password"])) { //Если логин и пароль были отправлены if (!$auth->auth($_POST["login"], $_POST["password"])) { //Если логин и пароль введен не правильно echo "<h2 style="color:red;">Логин и пароль введен не правильно!</h2>"; } } if (isset($_GET["is_exit"])) { //Если нажата кнопка выхода if ($_GET["is_exit"] == 1) { $auth->out(); //Выходим header("Location: ?is_exit=0"); //Редирект после выхода } } ?>
<?php if ($auth->isAuth()) { // Если пользователь авторизован, приветствуем: echo "Здравствуйте, " . $auth->getLogin() ; echo "<br/><br/><a href='?is_exit=1'>Выйти</a>"; //Показываем кнопку выхода } else { //Если не авторизован, показываем форму ввода логина и пароля ?>
<form method="post" action=""> Логин: <input type="text" name="login" value="<?php echo (isset($_POST["login"])) ? $_POST["login"] : null; // Заполняем поле по умолчанию ?>" /> <br/> Пароль: <input type="password" name="password" value="" /><br/> <input type="submit" value="Войти" /> </form>
<?php }
Конечно это самый простой пример создание авторизации на php. Пароли и имена пользователей должны браться из базы данных, шифроваться в MD5, и т.д. Более сложные примеры создания авторизации будут в следующих статьях.
Сессии очень полезны не только при разработке интернет-магазинов, но и при создании сайтов.
Можно придумывать различные фишки, правда стоимость создания сайта может резко увеличиться. Но это того стоит, т.к. интересный и функциональный сайт привлечет к себе много клиентов и постоянных посетителей.
Комментарии (Написать комментарий)
Комментарий:
Иван [22.12.2015]Большое спасибо
Комментарий:
to: Сергей [16.03.2015]Всё отлично работает, спасибо! Но такой вопрос:
private $_login = "demo"; //Устанавливаем логин
У меня никак не выходит вместо "demo" прицепить внешнюю переменную. Подскажите пожалуйста, как туда её передать? чтобы можно было авторизовывать не 1-го человека, а много пользователей сверив соответствующие данные не статически, а с переменной.
Комментарий:
Владимир [25.02.2015]При авторизации логин заносится в $_SESSION['чего то там']. в данном случае - $_SESSION["login"].
Это суперглобальный массив, который доступен на любой странице.
Можно взять имя содержимое нужного элемента на нужной вам странице.
Или можно посмотреть весь массив вот через такую функцию.
function Test_ShowArr($text){
foreach($text as $key=>$val)
{
echo $key."=>".$val."
";
}
}
Комментарий:
Сергей, для простого вывода используй конструкцию вида: getLogin(); ?>
Например,
Комментарий пользователя getLogin(); ?>
...комментарий бла-бла-бла
А вот для записи комментария в БД примерно так:
...
$username = $auth->getLogin();
$result = mysql_query("INSERT INTO ... (..., username) VALUES (..., '$username')");
...
?>
Если понял что это - хорошо, нет - гугли работа с БД Сергей [22.02.2015]
Комментарий:
Огромное спасибо за исходник! Все замечательно работает! только маленький вопросик, а как использовать $auth->getLogin(); например в файле coment.php , чтобы Имя автора присваивалось к комментарию?
Заполните все поля
Написать комментарий