Робоче середовище в РНР — це механізм, який дозволяє зберігати дані між запусками сценарію, вони унікальні для кожного користувача (логін, пароль, номер рахунку, вміст віртаальної корзини і т.д.)

Робоча сесія включає наступні етапи:

⇒ ініціалізацію (відкриття) сесії

⇒ регістрацію змінних сесії і їх використання

⇒ закриття сесії

Разом з ініціалізацією сесії користувач може зберігати деякі змінні, навіть якщо продовжує переходити по наступним сторінкам веб–сайту. В багатьох випадках інформація зберігається до закриття інтернет браузера або до тих пір, поки користувач не закриє сесію намірино.

Визначимо стандартний хід робочих сесій РНР.

В той момент, коли користувач заходить на сайт, РНР присвоює йому унікальну ID сесію: SID (індентифікатор сесії). Цей SID включає куки, як ми знаємо PHPSESID, і відправляє потім браузеру користувача. Якщо браузер не підтримує куки, або він просто неактивований, то предявлений SID додається до адреси URL.

Одночасно на сервері створюється файл з іменем SID. Якщо користувач бажає зберігти будь–яку інформацію, то вона практично буде записана в цей файл SID на сервері. 

Сесії РНР володіють наступними перевагами: 

⇒ вони являються більш безпечнішими для куки, так як інформація не передається по декілька раз між сервером і клієнтом.

 ⇒ можуть використовуватись, навіть якщо браузер користувача не підтримує куки або він не активований. 

⇒ дозволяють зберігати великий обєм інформації на відміну від куки.

Ініціалізація сесій РНР

Ініціалізація сесії РНР проходить за допомогою функції sesion_start(). Ця функція повинна бути розташована між першими рядками коду в РНР, так як виклик функції повинен бути зроблений до відправки його в інтенет браузер. Функція sesion_start() не являється необхідністю, так як в файлі конфігурації php.ini змінна  sesion.auto_start() має значення TRUE.

На прикладі нижче можна краще зрозуміти як працюють сесії і функції в якому показана головна сторінка.

page1.php

Створюємо змінну з іменем user_name, присвоїмо їй значення “” яке збережем в сесії РНР. Сторінка містить посилання на іншу сторінку.

page2.php

Послідня в свою чергу буде використовувати функцію sesion_start(), про яку говорилось раніше, щоб скачати із сесії значення змінної user_name з сторінки page1.php. Таким чином ми можемо використовувати значення цієї змінної в скрипті на сторінці page2.php.

Код на сторінці page1.php буде наступним.

<?php
//Сторінка page1.php
if(!isset($_SESSION['user_name']))
$_SESSION['user_name']="Ruslan";
?>
<DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
Це сторінка page1.php
<?php echo"<br/>Змінна сесії має значення".$_SESSION['user_name'];
?>
<br/>Посилання на <a href="http://ваша адреса/page2.php">сторінка page2.php</a>
</body>
</html>

Код на сторінці page2.php буде наступним.

<?php
//Сторінка page2.php
session_start();
$_SESSION['user_name']="Ruslan";?>
<DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<title>Сторінка page2.php</title>
</head>
<body>
Це сторінка page2.php
<?php
echo”<br/>Змінна сесії має значення”.$_SESSION['user_name'];
?>
</body>
</html>

Необхідно відзначити, що читання і призначення змінних здійснюється з допомогою глобальної змінної.

 _SESSION

Якщо ми зайдем на сторінку page1.php, ми отримаємо в браузері наступний текст:

 Це сторінка page1.php

Змінна сесії отримає значення: Ruslan

Посилання на сторінку page2.php

Якщо ми зробимо клік на сторінку page2.php, то відкриється сторінка page2.php і відобразить наступний вміст.

Це сторінка page2.php

Змінна сесії отримає значення: Ruslan

З даного прикладу видно, що сторінка  page2.php містить інформацію про змінну сесії, створену на першій сторінці page2.php

Використання змінних сесії

Можуть виникнути моменти, коли ми захочимо знайти SID даної сесії РНР. Для  цього використаємо функцію session_id()

Приклад:

<?php
session_id('12ab');
echo "<br/>ID даної сесії  SID=". session_id();
// Відобразиться результат: ID даної сесії  SID=”12ab”
?>

За допомогою функції session_id() можна призупинити параметри. Таким чином, ми встановили SID для даної сесії. І в такому разі нам необхідно здійснювати операції функцією session_id() з функцією  sesion_start().

Так як змінні РНР–сесії можуть бути прочитані іншими несанкціонованими користувачами, не рекомендується зберігати в такому місці базову інформацію, таку як паролі або імена користувачів.

Функція md5

Для того щоб забезпечити ці файли, ми використовуємо функції кодування, введення в РНР. 

⇒ crypt();

⇒md5()

Функція md5 кодує послідовність символів, представлених як параметр, і вертає рядок із 32 шістнадцятирічних символів. Ця функція використовує алгоритм кодування “RSA Data Security, Inc. MD5 Message–Digest Algorithm”.

Нижче приклад використання даної процедури користування.

Приклад

<?php
$user = "Ruslan";
$coding = md5($user);
echo "<br/>user coding = $coding";
?>

user coding = 3c8a3234ac60f6cdba7eb902c147991c

Допустимо у нас є змінна сесії $parol, яка зберігає пароль, і ми хочимо її закодувати і передати таким образом, щоб несанкціовані користувачі не змогли її використвувати. Для її кодування використовуємо функцію  md5().

Ініціалізуємо також нову змінну з іменем $secret, якій присвоємо значення деякого рядка. Крім того, разом з ведення паролю в сесію РНР звяжимо значення $secret і $parol і закодуємо результат. В результаті навіть якщо комусь небуть  вдасться розшифрувати змінну сесії, то навряд чи він зможе розділити рядок $secret, створену заново.

Приклад

<?php
$secret = '3c8a3234ac60f6cdba7eb902c147991c';
$parol = 'Ruslan';
$cod = md5($secret.$parol);
session_start();
$_SESSION['parol']= $cod;
//Роздивимось змінну $passtest для перевірки її значення рівно ноль
if(md5($secret. $parol)==$_SESSION['parol'])
    echo "Пароль прийнятий";
else
    echo "Пароль не дійсний"
?>

Таким чином, якщо значення змінно, яке може бути отримано, наприклад із  форми html, співпаде з паролем, збереженим нами, відобразиться повідомлення “Пароль прийнятий”.

З допомогою функції md5 можна зашрифувати дані, наприклад паролі користувачів. Алгоритм авторизації користувачів буде наступним.

При першій регістрації користувача зберігається хеш–код його пароль (для прикладу, в базі даних). При подальшій відвідуваннях сторінки хеш–код введеног користувачем паролю порівнюється з збереженим раніще хеш–кодом. Автризація вважається успішною якщо вони співпадають.

В такому випадку, навіть якщо єде кража бази даних, пропонована схема авторизації не дозволить отримати безпосередній доступ до паролів. Зловмисник повинен тратити значний час на перебір паролів по словнику, в звязку з чим паролі виду O8y56GG17tr практично не піддаються шифрованню, але пароль виду 1234567 буде не захищений.

Закриття і видалення сесій РНР

Щоб видалити сесію РНР, необхідно почати скрипт РНР з функції sesion_start(), при використанні сесії.

Для того щоб ліквідувати всі змінні, збережені в масиві $_SESSION ми використовуємо

unset($_SESSION);

Для того щоб видалити змінні, збережіть в сессії, ми використовуємо

unset($_SESSION[‘username’]);

Дані сесії зберігаються на сервері в формі тимчасових файлів. Для того щоб видалити ці дані сесії з сервера, ми використовуємо

session_destroy()

Приклад

<?php
// Ініціалізація даних сесії
session_start();
// Видалити таблицю $_SESSION
unset($_SESSION);
//Видалити дані з сервера
session_destroy();
echo "<br/>Дана сессія закрита";
?>

 19/04/2017 — приношу вибачення тим відвідувачам хто з вас до цієї дати заходив на цю сторінку, оскільки в кодах рнр сьогодні я виявив цілу копицю помилок. Коли вперше працював над даною сторінкою, а було це ще в дві тисячі пятнадцятому році, тоді в мові програмування рнр зовсім не розбирався.

Матеріали брав, а ну спробуйте вгадати звідки, а матеріали то я брав, вдумайтесь  з ЕШКО.

“Прикиньте собі”, вважається такою популярною школою кореспондентського навчання, вони себе так вважають, рахується європейскою, це означає що в нас, а точніше в Харкові знаходиться всього лише філіал школи, а всі матеріали по навчанню складаються там (в Європі).

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

А в принципі виявилось, ну я не знаю навіть що сказати, ну і справді, ну як можливо викладти таку несенітницю в кодах, цікаво а чи можливо за це неустойку отримати, як не як, я ж за уроки свого часу заплатив, точніше за курс, називається  Web Дизайн,  і курс який нічого в навчанні фактично і не дав.

Єдиний плюс, це те що сьогодні виправив їхні помилки. На мою думку, зовсім це не серйозно, контора то солідна, як таке могли не додивитись і опублікувати, я звісно що “повівся”, та й впевнений був що саме в ЄШКО повинно то бути все вірно.

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

Подумав тоді що це я сам напартачив, невірно наклацавши на клаві текст кодів, але коли заглянув в їхній журнал, там де я орієнтувався пишучи цю публікацію, і ох як говориться “мама мія”, це ж треба, наклацав то я якраз я то що там написано, (точнісенько як в них) коди переклацав.

Звичайно запускаю редактор, потратив час на виправлення кодів, а попробуй дізнайся, що вони там мали на увазі, адже коди з помилкою, практика по виправленню помилок в мене є, не перший код виправляю, взятий з скриптів знайдених в мережі.

Памятаю колись писав, якщо не працює потрібний вам скрипт, не паритись, а шукати інший, але скажу можна і не обовязково шукати, виправляти помилки не дуже тяжко, оскільки браузер сам видасть інформацію, саме а в чому помилка, в коді, нормальний рнр редактор також вказує що там помилка, тому орієнтуватись не тяжко.

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

Часто мені скрипти, які взяті в мережі трапляються з помилками. Помилки в більшості скриптів не значні, але щоб все працювало, помилки якщо присутні, потрібно виправляти.

Виправив я помилки в тих кодах, всі робочі, чи відповідають коди написаному тексту, мається на увазі чи відноситься саме текст до тих кодів, чи в тексті вказано про одне, а коди написані для іншого.

Ну поки що не скажу, буде час ще раз перечитаю цю сторінку, в принципі мало би бути все “Ок”.

Ну і залишається вказати джерело, звідки я брав матеріал, отож з курсу ЄШКО,  назва Web дизайн, урок номер десятий, РНР (друга частина), коди на сторінках 18 19 20, соромно скажу, але факт саме в ЄШКО таке викладають.