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");}
}
?>

Варто відзначити, що в PHP доступна можливість вказати час зберігання сесії, наприклад вказати термін дії 24 години:

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

Goodhoster.NET
Додати коментар