Php — mysql login

Виды режимов авторизации

Для удобства пользователей, для использования имеющейся в наличии аппаратуры и для обеспечения выполнения требований безопасности, созданы различные виды режимов авторизации. Часто используется комбинация нескольких таких режимов. Различают такие их типы:

  • по способу доступа: онлайн и офлайн;
  • по методу разграничения прав: дискреционное, мандатное, на основе ролей, контекста или решетки;
  • по типу кода: логин-пароль, биометрическая, электронный ключ, IP-адрес, динамический пароль, уникальный предмет (пропуск. карта);
  • по количеству проверок: одно- и многоступенчатая.

Авторизация на базе данных.

Чем отличается выше приведена авторизация от авторизации на базе данных!?

Одним → хранением и обработкой данных.

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

post запрос с формойЕще о базах данных

<?php

$login=$_POST;

$pass=md5($_POST);

include(«connect.php»);

mysql_select_db(«XXX», $conn);

$sql = «SELECT id FROM user WHERE user_loginname=’$login’ and user_password=’$pass'»;

$result = mysql_query($sql);

if (mysql_num_rows($result)>0)

{

echo(«больше 0»);

}

else

{

exit(«фуфло»);

}

?>

Отлично! Пароль и логин найдены, что дальше!?

сессию

$_SESSION = «здесь данные»;

Ну или если отталкиваться от выше приведенного кода:

$_SESSION = $login;

Создание API для входа пользователей

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

Откроем файл api/login.php и поместим в него следующий код

Мы сравним электронную почту пользователя и пароль из базы данных, поэтому нам нужно подключение к БД.

Нам также нужно создать экземпляр пользовательской таблицы, это позволит нам проверить, существует ли электронная почта, и прочитать хешированный пароль.

Замените комментарий // здесь будет соединение с БД в файле login.php следующим кодом:

Создание файла конфигурации (ядра)

Файл login.php не будет работать без файла core.php. Этот файл содержит общие настройки / переменные нашего приложения.

У нас есть переменные, используемые нашей библиотекой JWT для кодирования и декодирования токена. Значение $key должно быть вашим собственным и уникальным секретным ключом.

iss — адрес или имя удостоверяющего центра

aud — имя клиента для которого токен выпущен

iat — время, когда был выпущен JWT

nbf — время, начиная с которого может быть использован (не раньше, чем)

Вы также можете использовать exp — идентифицирует время истечения срока действия токена

Откроем api/config/core.php и добавим следующий код

Скачайте библиотеку PHP-JWT c GitHub’а

Скопируйте содержимое библиотеки в api/libs/

Тест входа в систему

Введём следующий URL запрос

В Body вставьте следующее значение JSON

Нам нужно сохранить сгенерированный JWT чтобы потом его использовать для проверки

Для проверки на неудачный вход в систему измените значение пароля на 222 (это неверный пароль)

Что такое сессии в PHP?

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

Эта информация, хранимая на протяжении сессии, доступна для всех веб-страниц ресурса. На сервере расположение временного файла определяется параметром session.save_path в конфигурационном файле php.ini.

При создании PHP-сессии выполняются следующие три действия:

  • Когда создается сессия, PHP генерирует уникальный идентификатор, который представляет собой случайную строку из 32 шестнадцатеричных чисел. Идентификатор времени жизни сессии PHP выглядит примерно так: 9c8foj87c3jj973actop1re472e8774;
  • Сервер отправляет на компьютер пользователя куки, называемые PHPSESSID, для хранения строки уникального идентификатора сессии;
  • Сервер генерирует в указанном временном каталоге файл, который содержит имя уникального идентификатора сессии с префиксом sess _g. sess_9c8foj87c3jj973actop1re472e8774.

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

Пользователь может завершить сеанс, нажав кнопку выхода из системы, которая вызывает функцию session_destroy(). Когда пользователь закрывает браузер, сессия PHP закрывается автоматически. Иначе сервер завершит сессию по истечении заданного периода времени.

Создаём регистрацию на PHP:

Для этого пишем скрипт который будет ниже:

PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77

// Проверяем нажата ли кнопка отправки формы

if(isset($_REQUEST’doGo’)){

// Все последующие проверки, проверяют форму и выводят ошибку

// Проверка на совпадение паролей

if($_REQUEST’pass’!==$_REQUEST’pass_rep’){

$error=’Пароль не совпадает’;

}

// Проверка есть ли вообще повторный пароль

if(!$_REQUEST’pass_rep’){

$error=’Введите повторный пароль’;

}

// Проверка есть ли пароль

if(!$_REQUEST’pass’){

$error=’Введите пароль’;

}

// Проверка есть ли email

if(!$_REQUEST’email’){

$error=’Введите email’;

}

// Проверка есть ли логин

if(!$_REQUEST’login’){

$error=’Введите login’;

}

// Если ошибок нет, то происходит регистрация

if(!$error){

$login=$_REQUEST’login’;

$email=$_REQUEST’email’;

// Пароль хешируется

$pass=password_hash($_REQUEST’pass’,PASSWORD_DEFAULT);

// Если день рождения не был указан, то будет самый последний год из доступных

$DOB=$_REQUEST’year_of_birth’;

// Добавление пользователя

mysqli_query($db,»INSERT INTO `users` (`login`, `email`, `password`, `DOB`) VALUES (‘».$login.»‘,'».$email.»‘,'».$pass.»‘, ‘».$DOB.»‘)»);

// Подтверждение что всё хорошо

echo’Регистрация прошла успешна’;

}else{

// Если ошибка есть, то выводить её

echo$error;

}

}

?>

<!DOCTYPE html>

<html lang=»ru»>

<head>

<meta charset=»UTF-8″>

<meta name=»viewport»content=»width=device-width, initial-scale=1.0″>

<meta http-equiv=»X-UA-Compatible»content=»ie=edge»>

<title>Зарегистрироваться<title>

<head>

<body>

<form action=»<?= $_SERVER ?>»>

<p>Логин<input type=»text»name=»login»id=»»><samp style=»color:red»>*<samp><p>

<p>EMail<input type=»email»name=»email»id=»»><samp style=»color:red»>*<samp><p>

<p>Пароль<input type=»password»name=»pass»id=»»><samp style=»color:red»>*<samp><p>

<p>Повторитепароль<input type=»password»name=»pass_rep»id=»»><samp style=»color:red»>*<samp><p>

<?php$year=date(‘Y’);?>

Годрождения

<select name=»year_of_birth»id=»»>

<option value=»»>—-<option>

<?phpfor($i=$year-14;$i>$year-14-100;$i—){?>

<option value=»<?= $i ?>»><?=$i?><option>

<?php}?>

<select>

<p><input type=»submit»value=»Зарегистрироваться»name=»doGo»><p>

<form>

<body>

<html>

HTML я не стал рассказывать, так как, там всё понятно, да и вообще программист должен разберется в коде.

Создание авторизации на 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)) { //Если сессия существует
            return $_SESSION; //Возвращаем значение переменной сессии 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 = true; //Делаем пользователя авторизованным
            $_SESSION = $login; //Записываем в сессию логин пользователя
            return true;
        }
        else { //Логин и пароль не подошел
            $_SESSION = false;
            return false; 
        }
    }
    
    /**
     * Метод возвращает логин авторизованного пользователя 
     */
    public function getLogin() {
        if ($this->isAuth()) { //Если пользователь авторизован
            return $_SESSION; //Возвращаем логин, который записан в сессию
        }
    }
    
    
    public function out() {
        $_SESSION = array(); //Очищаем сессию
        session_destroy(); //Уничтожаем
    }
}

$auth = new AuthClass();

if (isset($_POST) && isset($_POST)) { //Если логин и пароль были отправлены
    if (!$auth->auth($_POST, $_POST)) { //Если логин и пароль введен не правильно
        echo "<h2 style="color:red;">Логин и пароль введен не правильно!</h2>";
    }
}

if (isset($_GET)) { //Если нажата кнопка выхода
    if ($_GET == 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)) ? $_POST : null; // Заполняем поле по умолчанию ?>" />
    <br/>
    Пароль: <input type="password" name="password" value="" /><br/>
    <input type="submit" value="Войти" />
</form>
<?php 
} 

Конечно это самый простой пример создание авторизации на php. Пароли и имена пользователей должны браться из базы данных, шифроваться в MD5, и т.д. Более сложные примеры создания авторизации будут в следующих статьях. 

Авторизация

Форма авторизации запускает на сервере файл authorization.php. Этот скрипт принимает логин и прароль и
проверяет, есть ли такой пользователь. Если есть, то логин будет записываться в сессию. Если такой пользователь
не найден, то в сессию будет записываться информация об этом. Это нужно для того, чтобы страница, которая
будет открыта после выполнения скрипта, получила эту информацию и вывела сообщение, что введён неправильный
логин или пароль. Код скрипта такой:

authorization.php:

345678910
11121314
session_start();
$login=$_POST;
$pas=$_POST;
$db=mysqli_connect('localhost', 'root', '', 'mybase');
$query="SELECT * FROM users WHERE login='$login' AND BINARY pas='$pas'";
$result=mysqli_query($db, $query);
if (mysqli_num_rows($result))
$_SESSION=$login;
else
$_SESSION='er login';
header("Location: formreg.php");
mysqli_close($db);

В строке 7 формируется запрос на выборку строки с логином и паролем, полученными из формы. Перед полем
pas написано ключевое слово BINARY. Оно нужно
для того, чтобы при сравнении по
этому полю учитывался регистр символов. Если нужно, чтобы регистр учитывался и при сравнении логина, то
BINARY нужно написать перед ним. В примере делается запрос на выборку всех полей. На практике можно делать
выборку только тех полей, данные из которых нужно будет выводить на страницу.

После получения результата, проверяется, найдена ли указанная запись. Если запись есть, то логин записывается
в сессию. Если пользователь не найден, то вместо
логина пишется строка «er login». Можно написать другой текст,
но нужно быть уверенным, что он не совпадёт с каким-то логином. Затем происходит возврат на страницу
с формами.

На страницах сайта должен быть код, в котором происходит проверка — есть ли в сессии логин. И в зависимости
от этого определяется, как должна выглядеть страница. В нашем примере есть только одна страница. На ней и
сделаем проверку. Только код будет разделён на две части. Открытие сессии должно производиться до вывода
каких-либо данных, то есть, до HTML кода. Поэтому эта часть располагается в самом начале страницы. А остальной
код находится внутри тэга <body>, потому что он добавляет на страницу контнет.
Добавим в начало страницы такую строку:

2
<?php session_start(); ?>

Остальной скрипт расположим в теге <body>, в его начале:

101112131415161718
192021222324
<?php
$login=$_SESSION;
if ($login)
  {
  if ($login=='er login')
    {
    echo '<p>Введён неправильный логин или пароль</p>';
    $_SESSION='';
    }
  else 
  echo "<p>Здравствуйте, $login</p>";
  }
else 
echo '<p>Здравствуйте, гость</p>';
?>

Если в сессии есть логин, но в нём содержится строка «er login», то выводится сообщение, что логин или
пароль неправильный. После вывода сообщения логин становится пустым. Это сделано для того, чтобы сообщение
выводилось только один раз и при переходе на другие страницы не появлялось. Если логин другой, значит
пользователь авторизован и страница формируется как для зарегистрированных. Если логина нет, значит
авторизации ещё не было и страница выводится для не зарегистрированных пользователей.

Мы рассмотрели только общий принцип создания функции регистрации и авторизации. На реальных сайтах она
сложнее. Формы должны выводиться только для не авторизованных пользователей. Кроме того, нужно добавить
кнопку «Выход», которая отменяет авторизацию. При регистрации нужно делать
проверку формы, проверять уникальность логина и добавить
подтверждение пароля.

Регистрация на php

В общем, главное — это пара логин-пароль.

Первый важный момент — нельзя хранить пароли пользователей в открытом виде. То есть, как текст. Нельзя потому что если к БД получит доступ кто-то посторонний — он получит базу логин-паролей пользователей, что вряд ли им понравится. А если учесть что логин-пароль у многих пользователей на разных сервисах одни и те же — это ставит под угрозу и личные данные и финансы и личную переписку и все что угодно.

Пароли надо хранить в виде хэша. Хэширование — это операция, которая превращает исходные данные в какой-то слепок известной длины. Это хорошо тем, что слепок уникален. То есть, если мы изменим в исходных данных хотя бы один символ — слепок на выходе операции хэширования получится совершенно, до неузнаваемости другим. Операция хэширования необратима, то есть, из этого слепка не получится развернуть исходные данные. Этим оно и отличается от шифрования.

В MySQL и php есть одна и та же распространенная и безопасная функция хэширования — md5. Этот алгоритм принимает данные и отдает отпечаток.

Итак, мы получаем данные от пользователя, проверяем не пустые ли они, не содержат ли всяких ненужных нам символов (не ограничивайте пользователей слишком сильно). И теперь делаем запрос вроде этого:

Обратите внимание — я специально обозвал переменные $quoted_ потому что перед запихиванием их в запрос их обязательно надо отэскейпить функцией mysql_real_escape_string(). Так как эта функция очень часто используется, а пишется очень длинно (люблю архитекторов пхп) — я рекомендую запихать ее в свою оболочку

Например, так:

Больше

Fullscreen VideoМодальные коробкиШкалаИндикатор прокруткиСтроки хода выполненияПанель уменийПолзунки диапазонаПодсказкиPopupsСкладнойКалендарьHTML вставкаСписокПогрузчикиЗвездвРейтинг пользователейЭффект наложенияКонтактные фишкиКартыКарточка профиляОповещенияЗаметкиМеткиКругиКупонОтзывчивый текстФиксированный нижний колонтитулЛипкий элементОдинаковая высотаClearfixСнэк-барПрокрутка рисункаЛипкий заголовокТаблица ценПараллаксПропорцииПереключение типа/не нравитсяВключить скрытие/отображениеПереключение текстаПереключение классаДобавить классУдалить классАктивный классУвеличить HoverПереход при наведенииСтрелкиФормыОкно браузераНастраиваемая полоса прокруткиЦвет заполнителяВертикальная линияАнимация значковТаймер обратного отсчетаМашинкуСкоро страницаСообщения чатаРазделить экранОтзывыЦитаты слайд-шоуЗакрываемые элементы спискаТипичные точки останова устройстваПеретаскивание HTML-элементаКнопка спуска на входеJS медиа запросыJS анимацииПолучить элементы IFRAME

Что такое сессия в PHP?

Сессия — это механизм для сохранения информации на разных веб-страницах для идентификации пользователей пока они бродят по сайту или приложению. Вам интересно, почему сеансы нужны для веб-сайта? Чтобы понять, почему сеансы необходимы, нам нужно чуть вернуться назад и посмотреть, как работает HTTP-протокол.

Протокол HTTP — это протокол без учета состояния, что означает, что сервер не может сопоставить конкретного пользователя по несколькими запросами. Например, при доступе к веб-странице, сервер несёт ответственность за предоставление содержимого запрашиваемой страницы. Поэтому, когда вы обращаетесь к другим страницам одного и того же веб-сайта, веб-сервер интерпретирует каждый запрос отдельно, как если бы они не были связаны друг с другом. Серверу не известно, что каждый запрос исходит от одного и того же пользователя.

Следующая диаграмма вкратце изображает протокол HTTP.

В этой модели, если вы хотите отобразить пользовательскую информацию, вам нужно будет аутентифицировать пользователя в каждом запросе. Представьте, что вам нужно было вводить ваше имя пользователя и пароль на каждой странице с информацией ваших о данных! Да, это было бы громоздко и вообще не практично, и именно здесь на помощь приходят сеансы.

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

Обработка входа с сессиями и файлами «куки» (cookie)

Давайте быстро рассмотрим общий пример входа на веб-сайт, чтобы понять, что происходит за кулисами.

  1. Пользователь открывает страницу входа на веб-сайт.
  2. После отправки формы входа, сервер, на другом конце, аутентифицирует запрос, проверив введённые учётные данные.
  3. Если учётные данные, введённые пользователем, верны, сервер создаёт новый сеанс. Сервер генерирует уникальное случайное число, которое называется идентификатором сеанса. Также, на сервере, создаётся новый файл, который используется для хранения информации, относящейся к сеансу.
  4. Затем, идентификатор сеанса передаётся обратно пользователю, вместе с тем, что он запросил. За кулисами этот идентификатор сеанса отправляется в заголовке ответа «куки» (так называется по умолчанию).
  5. Когда браузер получает ответ от сервера, он получает заголовок куки-файла . Если в браузере разрешены «куки», то он сохранит этот , в котором хранится идентификатор сеанса, переданный сервером.
  6. Для последующих запросов, «кука» передаётся обратно на сервер. Когда сервер получает «куку» , он пытается инициализировать сеанс с этим идентификатором сеанса.  Он делает это, загружая файл сеанса, который был создан ранее во время инициализации сеанса. Затем он инициализирует суперглобальную переменную массива с данными, хранящимися в файле сеанса.

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

На следующей диаграмме показано, как протокол HTTP работает с сеансами.

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

Регистрация на сайте

Перед тем, как мы начнем добавлять аутентификацию на своем сайте, придётся добавить форму для регистрации нового аккаунта.Аккаунт — это учётная запись пользователя.
Чтобы завести аккаунт, требуется пройти регистрацию — это заполнение специальной формы, где пользователь указывает свою почту, пароль, и, возможно, дополнительную информацию.
После регистрации все данные из формы сохраняются в базе данных как есть

Но хранению паролей нужно уделить особое внимание

Хранение паролей

Пароль пользователя — это секретный набор символов, который используется в дальнейшем в ходе аутентификации. Зная пароль пользователя, злоумышленник может войти на сайт под его именем. По этой причине пароль нельзя хранить в базе в открытом виде. Ведь если информацию из БД сайта украдут, то
данные всех пользователей станут скомпрометированными.
Вместо самого пароля, в базе будут храниться их отпечатки — хэши.

Что такое хеширование

Отпечаток (хэш) — это результат работы функции хэширования, которая вернёт для любого значения строку фиксированной длины.
Используя специальный математический алгоритм, такая функция умеет преобразовывать любую переданную информацию к строке фиксированной длины (например, 32 или 64 символа). Причём любому массиву информации, будь это все статьи из Википедии, или одно слово, всегда будет соответствовать уникальный отпечаток. Повторный вызов функции для одного и того же исходника всегда возвращает один и тот же хэш.
Обратная операция (получить из отпечатка оригинал) невозможна.

Возьмём простой пример. У нас есть информация, для которой мы хотим получить отпечаток. Пусть такой информацией будет следующая строка:

«Я знаю только то, что ничего не знаю, но другие не знают и этого»

Результат обработки этой строки хэширующей функцией SHA-1 будет таким:

Хэширующие функции часто используются для контроля целостности информации при передачи по сети. Например, чтобы убедиться в том, что загруженный файл не был повреждён, достаточно получить его хэш и сравнить данный хэш с опубликованным на сайте. Если в файле поменялся хоть один байт, то эти отпечатки будут совершенно разными.
Нам же функции хэширования помогут для сравнения паролей.

Реализация регистрации пользователя

Вернёмся к форме регистрации.
Выше говорилось, что вместо пароля лучше хранить его отпечаток. Для получения отпечатка существуют множество хэшируюших функций. К счастью, нам не надо разбираться в их многообразии, потому что в PHP есть стандартная функция, которая делает ровно то, что нужно.
Вот пример как из пароля получить отпечаток, пригодный для хранения в базе:

Вызов этой функции вернёт следующую строку:
Именно это значение и следует хранить в БД, вместо пароля.

Download the PHP Login System Tutorial Class and Scripts

This PHP Secure Login and Registration is a reasonably complete class for creating a login and registration system that you can use in any application regardless if you use or not a framework like CodeIgniter, Zend, Symfony, etc..

This tutorial provides simple examples of how to use its of its core features in any application. You can freely adapt these example scripts to your PHP application.

You can archive from the download page or install it with the composer tool using .

If you have questions or comments you can post a message as comment to this article or post a support request in its support forum.

Кнопка ВЫЙТИ

Если пользователь авторизован и находится на сайте, обязательно нужно прописать кнопку «Выйти», при нажатии на которую должно происходить удаление, полное уничтожение данной сессии, чтобы никто не смог работать под ней больше до следующей авторизации. За удаление сессии отвечает встроенная (базовая) функция session_destroy();

В одном файле vhod.php у меня не получилось прописать функцию удаления сессии по клику, то бишь, по нажатию кнопки «Выйти», поэтому пришлось для работы кнопки ВЫЙТИ прописать для неё отдельный скрипт в отдельном файле close.php Для этого мы просто создаём html-форму с одной кнопкой «Выйти», в атрибуте action прописываем ссылку на обработчик этой кнопки, на файл close.php (пример выше уже был указан). А вот в файле-обработчике прописываем закрытие сессии по логину и дальнейшее её полное уничтожение. Пример:

unset($_SESSION);//закрытие сессии по логину 
session_destroy();//удаление сессии

Полностью файл close.php имеет такую структуру:

<?php 
session_start();//открытие сессии 
unset($_SESSION);//закрытие сессии по логину 
session_destroy();//удаление сессии 
header("Location: http://lora.in.ua/php-uroki/avtorizaciya/vhod.php");//Перенаправление на эту страницу после нажатия кнопки ВЫЙТИ 
?>

Запомнить пользователя

Теперь нам надо запомнить что пользователь авторизован и точно знать кто это. Первое что приходит в голову — использовать для этого куки. Действительно — запихать в куки логин и id пользователя и всегда знать кто запрашивает страницу в данный момент.

Но это порочная практика. Почему? Потому что куки — это файл, который хранится у пользователя в браузере и данные из этого файла передаются серверу в каждом запросе. Во-первых, они передаются как текст, а это значит — их легко перехватить. Во-вторых, это простой текст, посылаемый пользователем. Поэтому его можно буквально переписать. Например, если мы решили хранить в куках логин пользователя «Вася» он может открыть управление куками в своем браузере, найти нужную куку и исправить ее на, скажем, «Admin». И все. Теперь при каждом запросе мы будем получать куку, которая нам будет сообщять юзернейм пользователя — «Admin».

Поэтому безопаснее хранить все данные на сервере в недоступном из веба месте. В какой-то папке, к которой нельзя получить доступ из браузера. В эту папку нужно писать все данные о пользователе и читать их оттуда каждый раз, когда он запрашивает документ. Чтобы узнать какому пользователю принадлежит какой файл данных — надо обзывать файл уникальным именем и вот это имя кидать уже пользователю в куки. Таким образом, пользователь не сможет узнать как называется файл для пользователя Admin — этот файл генерирует система на сервере. И это позволяет таскать от документа к документу хоть пароли в открытом виде.

То что я описал — это механизм сессии. В Perl, например, для использования сессий нужно загружать модули. А в php сессии поддерживаются из коробки. Фактически, все что вам нужно знать — это функция session_start() и массив $_SESSION. Это все. Сейчас расскажу.

В каждом скрипте, где вы будете писать в сессию или читать из нее, вам надо до того, как вы выведете какую-то информацию вызвать функцию session_start(). Это запустит сессию. Эта функция создаст файл сессии если его нет или прочитает его если скрипту была передана специальная кука.

Чтобы записать в сессию данные нужно просто записать их в массив $_SESSION. Сейчас нам надо помнить id юзера.

Все. Теперь каждый раз когда пользователь будет запрашивать скрипт, который использует сессии — вам будет доступно значение элемента $_SESSION.

Поэтому когда пользователь ввел логин и пароль, мы получили его данные из БД, что подтверждает что такой пользователь есть в нашей базе данных, мы запоминаем его в сессии.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector