PHP. Пример работы с сессиями на примере простой авторизации

Сессии в PHP это метод хранения данных на стороне пользователя в cookie браузера, которые сохраняются между запросами страниц.

Для того чтобы открыть сессию нужно использовать функцию session_start(). Она открывает либо возобновляет уже существующую сессию.

С помощью сессий можно объявлять переменные и хранить их на стороне пользователя. Примером будет следующий код, который мы запишем в файл simple1.php:

<?php 
session_start();
$_SESSION['test1'] = "output 1";
$_SESSION['test2'] = "output 2";
?>

Таким образом, мы открыли сессию и объявили две переменные с содержимым «output 1» и «output 2». Создадим файл simple2.php для вывода данных переменных:

<?php
session_start();
echo "Значение test1: " . $_SESSION['test1']; 
echo "\n\nЗначение test2: " . $_SESSION['test2']; 
?>

При загрузке скрипта получим вывод:

Значение test1: output 1
Значение test2: output 2

Чтобы отменить объявление конкретной переменной, используем функцию unset(), например, если мы в файл simple2.php отменим переменную «test2»

<?php
session_start();
unset($_SESSION['test2']);
echo "Значение test1: " . $_SESSION['test1']; 
echo "\n\nЗначение test2: " . $_SESSION['test2']; 
?>

Получим вывод с ошибкой:

Значение test1: output 1
Notice: Undefined index: test2

Потому что мы отменили объявление данной переменной и теперь она пуста.

Попробуем написать простую авторизацию. Для начала создадим файл login.php, откроем сессию в нём и запишем две переменные с нашим логином и паролем в зашифрованном виде в MD5:

<?php
session_start();
$nickname = "d56b699830e77ba53855679cb1d252da";
$pass = "5f4dcc3b5aa765d61d8327deb882cf99";
?>

Где, логин — login,
пароль — password.

Далее напишем небольшую функцию:

<?php
if (empty($_SESSION['nickname']) || empty($_SESSION['password']) && $_SESSION['nickname'] != $nickname && $_SESSION['password'] != $pass) { 
echo '<form name="form1" method="post">
<input type="text" name="text" placeholder="ЛОГИН">
<input type="password" name="pwd" placeholder="ПАРОЛЬ">
<input type="submit" value="Войти" name="submit">
</form>
'; 
}
?>

В ней мы проверяем:
1. empty($_SESSION[‘nickname’]) || empty($_SESSION[‘password’]) — если переменные логина и пароля пустые — то не пропускаем пользователя и показываем форму авторизации.
2. $_SESSION[‘nickname’] != $nickname && $_SESSION[‘password’] != $pass — если переменные логина и пароля не совпадают с теми, которые мы установили в скрипте — то не пропускаем пользователя и показываем форму авторизации.

Далее, если в форму авторизации введены данные и нажата кнопка «Войти«, выполняется функция:

<?php
if (isset($_POST['submit'])) {
if (md5(@$_POST['text']) == $nickname && md5(@$_POST['pwd']) == $pass){ 
$_SESSION['nickname'] = $nickname;
$_SESSION['password'] = $pass;
header("Refresh:0");
} else {echo 'Логин или пароль неверный!';}

} 
}elseif (@$_SESSION['nickname'] == $nickname || @$_SESSION['password'] == $pass) {
echo "<h3>Авторизация успешна</h3>";
}
?>

В данном коде: if (md5($_POST[‘text’]) $nickname && md5($_POST[‘pwd’]) $pass){ — мы шифруем введённые данные пользователем и сверяем их с данными в скрипте (логин и пароль), если данные совпадают, присваиваем переменным $_SESSION[‘nickname’] и $_SESSION[‘password’] значения пароля, перезагружаем страницу и пропускаем пользователя, выводя ему сообщение об успешной авторизации:

elseif (@$_SESSION['nickname'] == $nickname || @$_SESSION['password'] == $pass) {
echo "<h3>Авторизация успешна</h3>";
}

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

Для выхода можем написать простую функцию, которая будет уничтожать сессию:

<?php
echo '<form name="form1" method="post">
<input type="submit" value="Выйти" name="submit">';
if (isset($_POST['submit'])) { 
session_destroy();
header("Refresh:0");}
}
?>

Полный код выглядит так:

<?php
session_start();
$nickname = "d56b699830e77ba53855679cb1d252da"; //логин в md5
$pass = "5f4dcc3b5aa765d61d8327deb882cf99"; // пароль в md5

if (empty($_SESSION['nickname']) || empty($_SESSION['password']) && $_SESSION['nickname'] != $nickname && $_SESSION['password'] != $pass) {
echo '<form name="form1" method="post">
<input type="text" name="text" placeholder="ЛОГИН">
<input type="password" name="pwd" placeholder="ПАРОЛЬ">
<input type="submit" value="Войти" name="submit">
</form>
'; 
if (isset($_POST['submit'])) {
if (md5(@$_POST['text']) == $nickname && md5(@$_POST['pwd']) == $pass){ 
$_SESSION['nickname'] = $nickname;
$_SESSION['password'] = $pass;
header("Refresh:0");
} else {echo 'Логин или пароль неверный!';}

} 
}elseif (@$_SESSION['nickname'] == $nickname || @$_SESSION['password'] == $pass) {
echo "<h3>Авторизация успешна</h3>";

echo 'form name="form1" method="post">
<input type="submit" value="Выйти" name="submit">';
if (isset($_POST['submit'])) { 
session_destroy();
header("Refresh:0");}
}
?>

Cтоит отметить, что в PHP доступна возможность указать время хранения сессии, например указать срок действия 24 часа:

session_start([
'cookie_lifetime' =>86400,
]);

Оставить комментарий

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