<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://wiki.cusu.edu.ua/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="uk">
		<id>https://wiki.cusu.edu.ua/index.php?action=history&amp;feed=atom&amp;title=%D0%A1%D0%B5%D1%81%D1%96%D1%97_%D0%B2_PHP</id>
		<title>Сесії в PHP - Історія редагувань</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.cusu.edu.ua/index.php?action=history&amp;feed=atom&amp;title=%D0%A1%D0%B5%D1%81%D1%96%D1%97_%D0%B2_PHP"/>
		<link rel="alternate" type="text/html" href="https://wiki.cusu.edu.ua/index.php?title=%D0%A1%D0%B5%D1%81%D1%96%D1%97_%D0%B2_PHP&amp;action=history"/>
		<updated>2026-07-05T21:32:03Z</updated>
		<subtitle>Історія редагувань цієї сторінки в вікі</subtitle>
		<generator>MediaWiki 1.23.2</generator>

	<entry>
		<id>https://wiki.cusu.edu.ua/index.php?title=%D0%A1%D0%B5%D1%81%D1%96%D1%97_%D0%B2_PHP&amp;diff=96471&amp;oldid=prev</id>
		<title>Леженко Дмитрий: Створена сторінка: == Сесії (сеанси) в PHP == Сесії і cookies призначені для зберігання відомостей про користувачів ...</title>
		<link rel="alternate" type="text/html" href="https://wiki.cusu.edu.ua/index.php?title=%D0%A1%D0%B5%D1%81%D1%96%D1%97_%D0%B2_PHP&amp;diff=96471&amp;oldid=prev"/>
				<updated>2013-05-19T21:15:23Z</updated>
		
		<summary type="html">&lt;p&gt;Створена сторінка: == Сесії (сеанси) в PHP == Сесії і cookies призначені для зберігання відомостей про користувачів ...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова сторінка&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Сесії (сеанси) в PHP ==&lt;br /&gt;
Сесії і cookies призначені для зберігання відомостей про користувачів при переходах між кількома сторінками. При використанні сесій дані зберігаються у тимчасових файлах на сервері. Файли з cookies зберігаються на комп'ютері користувача, і за запитом відсилаються броузером серверу.&lt;br /&gt;
&lt;br /&gt;
Використання сесій і cookies дуже зручно і виправдано в таких додатках як Інтернет-магазини, форуми, дошки оголошень, коли, по-перше, необхідно зберігати інформацію про користувачів протягом кількох станиць, а, по-друге, своєчасно надавати користувачеві нову інформацію.&lt;br /&gt;
&lt;br /&gt;
Протокол HTTP є протоколом &amp;quot;без збереження стану&amp;quot;. Це означає, що даний протокол не має вбудованого способу збереження стану між двома транзакціями. Коли користувач відкриває спочатку одну сторінку сайту, а потім переходить на іншу сторінку цього ж сайту, то грунтуючись тільки на засоби, що надаються протоколом HTTP неможливо встановити, що обидва запиту відносяться до одного користувача. Необхідний метод, за допомогою якого було б відстежувати інформацію про користувача протягом одного сеансу зв'язку з Web-сайтів. Одним з таких методів є управління сеансами за допомогою призначених для цього функцій. Для нас важливо те, що сеанс по суті, являє собою групу змінних, які, на відміну від звичайних змінних, зберігаються і після завершення виконання PHP-сценарію.&lt;br /&gt;
&lt;br /&gt;
При роботі з сесіями розрізняють наступні етапи:&lt;br /&gt;
&lt;br /&gt;
-відкриття сесії&amp;lt;br&amp;gt;&lt;br /&gt;
-реєстрація змінних сесії і їх використання&amp;lt;br&amp;gt;&lt;br /&gt;
-закриття сесії&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Як влаштовані, і як працюють сесії? ==&lt;br /&gt;
Для початку треба якось ідентифікувати браузер. Для цього треба видати йому унікальний ідентифікатор і попросити передавати його з кожним запитом. &amp;lt;br&amp;gt;&lt;br /&gt;
Сесії використовують стандартні, добре відомі способи передачі даних. Власне, інших-то просто і немає.&lt;br /&gt;
Ідентифікатор - це звичайна змінна. Типово її ім'я - PHPSESSID.&amp;lt;br&amp;gt;&lt;br /&gt;
Завдання PHP відправити її браузеру, щоб той повернув її з наступним запитом. З уже згадуваного розділу FAQ ясно, що змінну можна передати тільки двома способами: у cookies або POST / GET запитом.&lt;br /&gt;
PHP використовує обидва варіанти.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
За це відповідають два налаштування в php.ini:&amp;lt;br&amp;gt;&lt;br /&gt;
session.use_cookies - якщо дорівнює 1, то PHP передає ідентифікатор в cookies, якщо 0 - то ні.&amp;lt;br&amp;gt;&lt;br /&gt;
session.use_trans_sid якщо дорівнює 1, то PHP передає його, додаючи до URL і формам, якщо 0 - то ні.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Міняти ці та інші параметри сесій можна так само, як і інші настройки PHP - у файлі php.ini, а так само за допомогою команди ini_set () або у файлах налаштування веб-сервера.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Якщо включена тільки перша, то при старті сесії (при кожному виклику session_start ()) клієнту встановлюється cookies. Браузер справно при кожному наступному запиті цю cookies повертає і PHP має ідентифікатор сесії. Проблеми починаються, якщо браузер cookies не повертає. У цьому випадку, не отримуючи cookies з ідентифікатором, PHP буде весь час стартувати нову сесію, і механізм працювати не буде.&lt;br /&gt;
&lt;br /&gt;
Якщо активована тільки друга, то cookies не виставляються. А відбувається те, заради чого, в основному, власне, і варто використовувати вбудований механізм сесій. Після того, як скрипт виконує свою роботу, і сторінка повністю сформована, PHP переглядає її всю і дописує до кожної посиланням і до кожної форми передачу ідентифікатора сесії. Це виглядає приблизно так:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/index.php&amp;quot;&amp;gt;Index&amp;lt;/a&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
перетворюється на&lt;br /&gt;
&amp;lt;a href=&amp;quot;/index.php?PHPSESSID=9ebca8bd62c830d3e79272b4f585ff8f&amp;quot;&amp;gt; Index &amp;lt;/ a&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
а до форм додається приховане поле &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;PHPSESSID&amp;quot; value=&amp;quot;00196c1c1a02e4c37ac04f921f4a5eec&amp;quot; /&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
І браузер при кліці на якесь посилання, або при натисканні на кнопку у формі, пошле в запиті потрібну нам змінну - ідентифікатор сесії!&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теоретично, в наших з вами саморобних сесіях на cookies і базі, можна самому, руками приписати до всіх посиланнями передачу ід - і тоді наші власні сесії будуть працювати незалежно від cookies.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
За умовчанням в останніх версіях PHP включені обидві опції. Як PHP надходить в цьому випадку? Кука виставляється завжди. А посилання автодополняются тільки якщо РНР не виявлено cookies з ідентифікатором сесії. Коли користувач в првие раз за цей сеанс заходить на сайт, йому ставиться cookies, і доповнюються посилання. При наступному запиті, якщо cookies підтримуються, PHP бачить cookies і перестає доповнювати посилання. &amp;lt;br&amp;gt;Якщо cookies не працюють, то PHP продовжує справно додавати ід до посилань, і сесія не втрачається.&amp;lt;br&amp;gt;&lt;br /&gt;
Користувачі, у яких працюють cookies, побачать довге посилання з ID тільки один раз.&lt;br /&gt;
&lt;br /&gt;
З передачею ідентифікатора закінчили. Тепер залишилося прив'язати до нього файл з даними на стороні сервера. PHP це зробить за нас. Досить просто написати:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
session_start (); &amp;lt;br&amp;gt;&lt;br /&gt;
$ _SESSION ['Test'] = 'Hello world!'; &amp;lt;br&amp;gt;&lt;br /&gt;
І PHP запише у файл, пов'язаний з цією сесією, змінну test. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тут дуже важливе зауваження. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Масив $ _SESSION - особливий. &amp;lt;br&amp;gt;&lt;br /&gt;
У ньому, власне, і знаходяться змінні, які ми ходимо зробити доступними в різних скриптах. &amp;lt;br&amp;gt;&lt;br /&gt;
Щоб помістити змінну в сесію, досить привласнити її елементу масиву $ _SESSION. &amp;lt;br&amp;gt;&lt;br /&gt;
Щоб отримати її значення - досить звернутися до того ж елементу. Приклад буде трохи нижче. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cборка сміття - видаленням застарілих файлів PHP теж займається сам. Як і кодуванням даних і купою всяких інших потрібних речей. У результаті цього піклування робота з сесіями виявляється дуже простий. &amp;lt;br&amp;gt;&lt;br /&gt;
Ось ми, власне, і підійшли до прикладу роботи сесій. &amp;lt;br&amp;gt;&lt;br /&gt;
Приклад дуже маленький: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;? &amp;lt;br&amp;gt;&lt;br /&gt;
session_start (); &amp;lt;br&amp;gt;&lt;br /&gt;
if (! isset ($ _SESSION ['counter'])) $ _SESSION ['counter'] = 0; &amp;lt;br&amp;gt;&lt;br /&gt;
echo &amp;quot;Ви оновили цю сторінку&amp;quot;. $ _SESSION ['counter'] + +. &amp;quot;раз.&amp;quot;; &amp;lt;br&amp;gt;&lt;br /&gt;
echo &amp;quot;&amp;amp;lt;br&amp;amp;gt; &amp;lt;a href=&amp;quot;.$_SERVER['PHP_SELF'].&amp;quot;&amp;gt; оновити&amp;quot;; &amp;lt;br&amp;gt;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Ми перевіряємо, чи є у нас в сесії мінлива counter, якщо ні, то створюємо її зі значенням 0, а далі виводимо її значення і збільшуємо на одиницю. Збільшене значення запишеться у сесію, і при наступному виклику скрипта змінна буде мати значення 1, і так далі. Все дуже просто. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для того, щоб мати доступ до змінних сесії на будь-яких сторінках сайту, треба написати ТІЛЬКИ ОДНУ (!) Рядок у самому початку КОЖНОГО файлу, в якому нам потрібні сесії: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
session_start (); &amp;lt;br&amp;gt;&lt;br /&gt;
І далі звертатися до елементів масиву $ _SESSION. Наприклад, перевірка авторизації буде виглядати приблизно так: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
session_start (); &amp;lt;br&amp;gt;&lt;br /&gt;
if ($ _SESSION ['authorized'] &amp;lt;&amp;gt; 1) { &amp;lt;br&amp;gt;&lt;br /&gt;
header (&amp;quot;Location: / auth.php&amp;quot;); &amp;lt;br&amp;gt;&lt;br /&gt;
exit; &amp;lt;br&amp;gt;&lt;br /&gt;
} &amp;lt;br&amp;gt;&lt;br /&gt;
Видалення змінних з сесії. Якщо у вас register_globals = off, то достатньо написати &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
unset ($ _SESSION ['var']); &amp;lt;br&amp;gt;&lt;br /&gt;
Якщо ж ні, то тоді поруч з нею треба написати: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
session_unregister ('var'); &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Відкриття сесії ==&lt;br /&gt;
Найпростіший спосіб відкриття сесії полягає у використанні функції session_start, яка викликається на початку PHP-сценарію:&lt;br /&gt;
&lt;br /&gt;
'''session_start'''&lt;br /&gt;
&lt;br /&gt;
синтаксис:&lt;br /&gt;
&lt;br /&gt;
   session_start ();&lt;br /&gt;
&lt;br /&gt;
Ця функція перевіряє, чи існує ідентифікатор сесії, і, якщо ні, то створює його. Якщо ідентифікатор поточної сесії вже існує, то завантажуються зареєстровані змінні сесії.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Реєстрація змінних сесії ==&lt;br /&gt;
Після ініціалізації сесії з'являється можливість зберігати інформацію в су-перглобальном масиві $ _SESSION. Нехай є файл index.php у якому в масив $ _SESSION зберігається змінна і масив.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;? php&lt;br /&gt;
&lt;br /&gt;
   / / Ініціюємо сесію&lt;br /&gt;
&lt;br /&gt;
   session_start ();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   / / Розміщуємо значення в сесію&lt;br /&gt;
&lt;br /&gt;
   $ _SESSION ['Name'] = &amp;quot;value&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   / / Розміщуємо масив у сесію&lt;br /&gt;
&lt;br /&gt;
   $ arr = array (&amp;quot;first&amp;quot;, &amp;quot;second&amp;quot;, &amp;quot;third&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
   $ _SESSION ['Arr'] = $ arr;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   / / Виводимо посилання на іншу сторінку&lt;br /&gt;
&lt;br /&gt;
   echo &amp;quot;&amp;lt;a href='other.php'&amp;gt; інша сторінка &amp;lt;/ a&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На сторінках, де відбувається виклик функції session_start (), значення даних змінних можна витягти з суперглобального масиву $ _SESSION. У наступному лістингу наводиться вміст сторінки other.php, де витягуються дані, раніше поміщені на сторінці index.php.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;? php&lt;br /&gt;
&lt;br /&gt;
  / / Ініціюємо сесію&lt;br /&gt;
&lt;br /&gt;
   session_start ();&lt;br /&gt;
&lt;br /&gt;
  / / Виводимо вміст суперглобального масиву $ _SESSION&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;рre&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
print_r ($ _SESSION);&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;/ pre&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат роботи скрипта виглядає наступним чином:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Array&lt;br /&gt;
&lt;br /&gt;
(&lt;br /&gt;
&lt;br /&gt;
     [name] =&amp;gt; value&lt;br /&gt;
&lt;br /&gt;
     [arr] =&amp;gt; Array&lt;br /&gt;
&lt;br /&gt;
         (&lt;br /&gt;
&lt;br /&gt;
             [0] =&amp;gt; first&lt;br /&gt;
&lt;br /&gt;
             [1] =&amp;gt; second&lt;br /&gt;
&lt;br /&gt;
             [2] =&amp;gt; third&lt;br /&gt;
&lt;br /&gt;
         )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Закриття сесії ==&lt;br /&gt;
Після завершення роботи з сесією спочатку потрібно разрегістріровать всі змінні сесії, а потім викликати функцію unset ():&lt;br /&gt;
&lt;br /&gt;
синтаксис:&lt;br /&gt;
&lt;br /&gt;
   unset ($ _SESSION [&amp;quot;username&amp;quot;]);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приклад простий сесії ==&lt;br /&gt;
Розглянемо приклад простої сесії, що працює з трьома сторінками. При відвідуванні користувачем першої сторінки відкривається сесія і реєструється змінна $ username. Відповідний код реалізації приведений в лістингу:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
&lt;br /&gt;
   session_start ();&lt;br /&gt;
&lt;br /&gt;
   $ _SESSION ['Username'] = &amp;quot;maksim&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
   echo 'Привіт,'. $ _SESSION ['username'].&amp;amp;lt;br&amp;amp;gt;;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;a href=&amp;quot;page2.php&amp;quot;&amp;gt; На наступну сторінку &amp;lt;/ a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Після цього, користувач maksim натискає на посилання і потрапляє на сторінку page2.php, код якої наведено в лістингу:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
&lt;br /&gt;
   session_start ();&lt;br /&gt;
&lt;br /&gt;
   echo $ _SESSION ['username']. ', Ти прийшов на іншу сторінку цього сайту! ';&lt;br /&gt;
&lt;br /&gt;
   echo (&amp;quot;&amp;amp;lt;br&amp;amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;a href=&amp;quot;page3.php&amp;quot;&amp;gt; На наступну сторінку &amp;lt;/ a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При натисканні на посилання, користувач потрапляє на сторінку page3.php, при цьому відбувається розреєстрації сеансовом змінної і знищення сесії. Відповідний код реалізації приведений в лістингу:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
&lt;br /&gt;
   session_start ();&lt;br /&gt;
&lt;br /&gt;
   unset ($ _SESSION ['username']); / / разрегістріровалі змінну&lt;br /&gt;
&lt;br /&gt;
   echo 'Привіт,'. $ _SESSION ['username'];&lt;br /&gt;
&lt;br /&gt;
   / * Тепер ім'я користувача вже не виводиться * /&lt;br /&gt;
&lt;br /&gt;
   session_destroy (); / / знищуємо сесію&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;/div&gt;</summary>
		<author><name>Леженко Дмитрий</name></author>	</entry>

	</feed>