PHP: Создание формы входа и скрипт авторизации на сайте

Сегодня я решил рассказать о том, как сделать на своем сайте вход в систему, без использования базы данных.

Если вы читали мой блог, то реализацию авторизации на сайте с помощью Mysql можно было найти в статье про создание гостевой книги на PHP.

В данной статья я расскажу только о создании формы авторизации на сайте, с возможностью «запомнить» пользователя. Я не буду тратить время на красивый дизайн, так как это не главное.
Чтобы сделать реализацию личного кабинета, создадим три файла php. Первый будет основным файлом index.php, второй login.php будет описывать логику работы авторизации на сайте, а третий config.php будет отвечать за переменные и методы, которые мы будем использовать в первых двух файлах.

index.php

<?php include __DIR__.'/config.php'; ?>
<html>
<head>
    <title>Пример авторизации на сайте</title>
</head>
<body>

<?php if(AUTH) { //Если мы авторизированы ?>

    Привет, <?php echo $user['name']; ?>!
    <a href="login.php?logout">Выход</a>

<?php } else { //Если мы не авторизированы  ?>

<form action="login.php" method="post">
    <p>Имя пользователя: <input type="text" name="login" /></p>
    <p>Пароль: <input type="password" name="password" /></p>
    <p>Запомнить меня: <input type="checkbox" name="remember" /></p>
    <?php if(!empty($message)) { ?>
    <p><?php echo $message; ?></p>
    <?php } ?>
    <p><input type="submit" value="Вход" /></p>
</form>

<?php } ?>

</body>
</html>

config.php

<?php
header('Content-type: text/html;charset=utf-8');
session_start();

define('SALT', 'As913yr-1u3 -ru1 mr=1r=1 m=0r813'); //рандомная строка

function getPassword($password)
{   //функция получения зашифрованного пароля
    return md5($password.SALT);
}

$users = array( //мы не используем БД, поэтому пользователей храним в массиве
    //пароль = getPassword('password1')
    'login1' => array('password' => '4b0e292e27ee63a490a5214e225999b0', 'name' => 'Имя пользователя'),
    //пароль = getPassword('password2')
    'login2' => array('password' => 'cf4578943c7db66051404d5c2b535c7f', 'name' => 'Имя пользователя 2'),
);

if(!isset($_SESSION['user']) && isset($_COOKIE['login']) && isset($_COOKIE['password'])
    && isset($users[$_COOKIE['login']]) && getPassword($users[$_COOKIE['login']]['password']) == $_COOKIE['password']) {
    //если нет сессии пользователя, но есть куки с пользовательским логином и паролем
    //проходим аторизацию
    $_SESSION['user'] = $_COOKIE['login'];
}

define('AUTH', isset($_SESSION['user']) && isset($users[$_SESSION['user']])); //флаг аторизованы мы или нет
$user = AUTH ? $users[$_SESSION['user']] : null;


$message = '';
if(!empty($_SESSION['message'])) {
    $message = $_SESSION['message'];
    unset($_SESSION['message']);
}

login.php

<?php
include __DIR__.'/config.php';

if(!AUTH) {
  //мы еще не авторизованы
  if(!empty($_POST['login']) && !empty($_POST['password']) && isset($users[$_POST['login']])) {
      //передали данные для входа и логин существует
      if($users[$_POST['login']]['password'] == getPassword($_POST['password'])) {
          //пароль совпадает
          $_SESSION['user'] = $_POST['login'];

          if(isset($_POST['remember'])) {
            //стоит галка "запомнить меня"
            setcookie('login', $_POST['login'], time() + 3600 * 24 * 365, '/');
            setcookie('password', getPassword($users[$_POST['login']]['password']), time() + 3600 * 24 * 365, '/');
          }

      }
  }
  if(!isset($_SESSION['user']) || $_SESSION['user'] != $_POST['login']) {
    //авторизация не прошла, сохраним ошибку
    $_SESSION['message'] = 'Неверный логин или пароль';
  }
} else {
    if(isset($_GET['logout'])) { //выход из системы
        unset($_SESSION['user']);
        setcookie('login', '', time() - 3600 * 24 * 365, '/');
        setcookie('password', '', time() - 3600 * 24 * 365, '/');
    }
}

header('Location: index.php'); //переходим на главную страницу
Запись опубликована в рубрике PHP с метками , , , , , , , , , . Добавьте в закладки постоянную ссылку.