PHP SQL
PHP SQL .ru
  Главная  Уроки  PHP  MySQL  jQuery  RegEx  CSS  Книги  Форум  
 Функции


  На главную

  Назад  Вперед

  Печать

Делаем авторизацию на сайте

Переходим к практике. Сейчас мы сделаем сайт с авторизацией.
Он будет состоять из трех страниц:
1. страница авторизации
2. страница с буквой "А"
3. страница с буквой "Б"
Страницы "А" и "Б" могут посещать только авторизованные пользователи. Выглядеть это будет следующим образом:
Начнем со страницы login

<?php
//
// Авторизация.
//
function Login($username
{
// Имя не должно быть пустой строкой.
if ($username == "")
return false;
// Запоминаем имя в
$_SESSION["username"]=$username;
// и в cookies, если пользователь пожелал запомнить его (на неделю).
if ($remember){
setcookie("username"
// Успешная авторизация.
return true;
}
//
// Сброс авторизации.
//
function Logout()
{
// Делаем cookies
setcookie("username"
// Сброс сессии.
unset($_SESSION["username"
}
//
// Точка входа.
//
session_start();
$enter_site = false;
// Попадая на страницу login.php, авторизация сбрасывается.
Logout();
// Если массив POST не пуст, значит, обрабатываем отправку формы.
if (count($_POST) > 0)
$enter_site = Login($_POST["username"], $_POST["remember"] == "on");
// Переадресуем авторизованного пользователя на одну из страниц сайта.
if ($enter_site)
{
header("Location: a.php");
exit();
}
?>
<html>
<head>
<title>Вход на сайт</title>
</head>
<body>
<h1>Вход на сайт</h1>
<form action="" method="post">
Введите имя:
<br/>
<input type="text" name="username" />
<br/>
<input type="checkbox" name="remember" /> Запоминть меня
<br/>
<input type="submit" value="Войти" />
</form>
</body>
</html>

Комментарии в коде вполне позволяют понять смысл происходящего. При вводе имени пользователь перенаправляется на страницу a.php.
Вот так происходит перенаправление:
header("Location: a.php");
exit();
Вызовом функции header() мы отправляем заголовок, говорящий браузеру о том, что необходимо обратиться к другой странице. Функция exit() прекращает выполнение скрипта. Ее мы вызываем для того, чтобы HTML формы авторизации не был передан в ответе.

Переходим к странице a.php:

<?php
//
// Точка входа.
//
session_start();
// Если в контексте сессии не установлено имя пользователя, пытаемся взять
его
// из cookies.
if (!isset($_SESSION["username"]) && isset($_COOKIE["username"]))
$_SESSION["username"] = $_COOKIE["username"];
// Еще раз ищем имя пользователя в контексте сессии.
$username = $_SESSION["username"];
// Неавторизованных пользователей отправляем на страницу регистрации.
if ($username == null)
{
header("Location: login.php");
exit();
}
?>
<html>
<head>
<title>Страница А</title>
</head>
<body>
<h1>Страница "А"</h1>
<b>А</b> и <a href="b.php">Б</a> сидели на трубе.
<br/>
<br/>
Вы вошли как <b><?php echo $username; ?></b> | <a
href="login.php">Выход</a>
</body>
</html>
Вначале мы проверяем факт авторизации. Неавторизованные пользователи отправляются на страницу входа, доступ к содержимому a.php им закрыт. Рассмотрим подробнее проверку авторизации. Если имени пользователя нет в контексте сессии, то оно может быть запомнено в cookies. В этом случае копируем его из cookies в файл сессии. if (!isset($_SESSION["username"]) && isset($_COOKIE["username"])) $_SESSION["username"] = $_COOKIES["username"]; Затем снова проверяем контекст сессии. $username = $_SESSION["username"]; Если и на этот раз имя пользователя найти не удалось, значит отправляем его на страницу входа.
if ($username == null)
{
header("Location: login.php");
exit();
}
Ссылка "Выход" ведет на страницу входа, которая сбрасывает данные авторизации. Страница b.php почти такая же:
<?php
//
// Точка входа.
//
session_start();
// Если в контексте сессии не установлено имя пользователя, пытаемся взять
его
// из cookies.
if (!isset($_SESSION["username"]) && isset($_COOKIE["username"]))
$_SESSION["username"] = $_COOKIE["username"];
// Еще раз ищем имя пользователя в контексте сессии.
$username = $_SESSION["username"];
// Неавторизованных пользователей отправляем на страницу регистрации.
if ($username == null)
{
header("Location: login.php");
exit();
}
?>
<html>
<head>
<title>Страница Б</title>
</head>
<body>
<h1>Страница "Б"</h1>
<a href="a.php">А</a> и <b>Б</b> сидели на трубе.
<br/>
<br/>
Вы вошли как <b><?php echo $username; ?></b> | <a
href="login.php">Выход</a>
</body>
</html>

Резюме

Теперь вы можете сделать сайт с сохранением состояния между запросами, например, интернет-магазин. Служит для этого механизм сессий, который в свою очередь реализован на основе Cookies (как правило).

Cookies можно использовать и на период более длительный, чем сессия для хранения различной информации. Например, для блога с возможностью оставлять комментарии без регистрации, удобно хранить псевдоним и email пользователя.

PHP предоставляет удобные механизмы работы с сессиями и куками: это системные переменные $_SESSION и $_COOKIE, а также функции session_start(), session_destroy(), setcookie().

 
Предыдущая   На главную   Следующая          

Гость   22.03.2011 в 09:12
Не работает)

DIMA   30.08.2011 в 20:19
Admin Админ крутая статья в login странице там вроде скобок нехватет после типа setcookie(\"username\" и тд? может быть я ошибаюсь хз...

Yury   18.02.2012 в 20:37
Это урок из курса \"PHP за три недели\" Школы Программирования. Все должно работать, разве что во время copy/paste где-то потерялся какой-нибудь символ.

qant   21.02.2012 в 16:25
Почти везде в конце сьедены знаки ] и ) и ;

Пофиксить поможет какойнибуть IDE например NetBeans или Dreamweaver

Вот пример:


Гость   21.02.2012 в 16:26
function Login($username !!!ТУТ \")\"!!!

{ и так далее...

Гость   07.11.2012 в 18:17
И не может работать, пример кривой как ноги кочевника :)

Mabus   08.11.2012 в 09:37
:D
Ну нужно приложить уже руки а не ноги и вполне работает :)))

Mabus   08.11.2012 в 09:51
Спасибо!!! :)

%username%   31.05.2013 в 11:13
У меня работает, но в куку не сохраняется

Alex   28.04.2014 в 14:33
супер! не хватает пары скобок в некоторых местах, а так пример очень полезный. Спасибо!

Ваш комментарий:

'

Реклама на сайте | Обмен ссылками | Ссылки | Контакты
Добавить статью | Добавить исходник
2010-2014 © phpsql.ru