Сессии в 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, ]);