БлогNot. PHP: простейшая авторизация одним файлом

PHP: простейшая авторизация одним файлом

В блоге есть более подробные материалы по теме, цель этой заметки - показать пример скрипта с авторизацией пользователя, построенного буквально "на одном файле". Используется механизм сессии, для которого, вообще говоря, в браузере должен быть включён механизм приёма cookie-файлов.

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

Выполнить это можно, например, на локальном хосте в Denwer как файл типа .php

<?php
 session_start(); //вызывается до вывода любого контента

 function check_user () { //проверка авторизации пользователя
  if (!isset($_SESSION['my_inside'])) return false;
  else return $_SESSION['current_user'];
 }

 function form() { //вывод формы для авторизации
  echo '<form method="post">Логин: <input type="text" size="33" maxlength="32" name="login">
   Пароль: <input type="password" size="33" maxlength="32" name="pass">
   <input type=submit value="OK"></form>';
 }

 if (isset($_GET['off'])) { //сделан запрос на выход из сессии? 
  if (check_user()) $_SESSION = array();
 }
 if (!check_user()) { //если не авторизован
  if (!isset($_POST['login']) or !isset($_POST['pass'])) { echo '<p>Авторизуйтесь</p>'; form(); exit; }
  //если переданы логин и пароль из формы:
  $login = trim(htmlspecialchars($_POST['login'])); 
   //в реальности нужно получить $login и $pass по безопасному протоколу HTTPS
  $pass = md5(trim(htmlspecialchars($_POST['pass']))); 
   //пароль нужно зашифровать для сравнения с зашифрованным паролем из БД
  $login0 = 'Admin'; $pass0=md5('123'); //в реальности - получить из БД зашифрованный пароль для $login
  if ($login==$login0 and $pass==$pass0) { //вошли в систему
   $_SESSION['my_inside']=1; //"секретная переменная" в сессии, поменяйте ей имя
   $_SESSION['current_user']=$login; //логин в сессии, чтобы различать пользователей между собой
  }
  else { //не вошли, вывести сообщение и форму
   echo '<p>Неверный логин или пароль!</p>'; form(); exit;
  }
 }
 //Код для авторизованного пользователя:
 echo '<p>Вы авторизованы; <a href="auto2.php?off">выйти</a></p>';
?>

Ну и стандартную функцию session_start мы здесь довольно грубо вызываем даже тогда, когда пользователь ещё не авторизовался. В реальности она нужна по тем ветвям скрипта, где мы что-то делаем с массивом $_SESSION.

Можно обойтись без сессий и использовать авторизацию через куки, как здесь.


теги: php учебное

03.02.2019, 12:41; рейтинг: 330