Сесії в 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");} } ?>
Варто відзначити, що в PHP доступна можливість вказати час зберігання сесії, наприклад вказати термін дії 24 години:
session_start([ 'cookie_lifetime' =>86400, ]);