[Powered by Google Translate] [PHP Сесії]
[Томмі MacWilliam, Гарвардський університет]
[Це CS50.] [CS50.TV]
Сеанси в PHP може бути використаний для реалізації функціональності,
як користувальницьких логінів, у вашому веб-додаток.
PHP сесії дозволяють зв'язати інформацію
з усією сеансу перегляду користувача
а не просто одній сторінці.
Значить, як користувач відвідує різні PHP-сторінок, складових ваш сайт,
будь-яка інформація, у засіданні буде зберігатися.
Таким чином, це означає, що дані, збережені в сесії на одну сторінку
може пізніше бути доступні іншу сторінку.
Зберігання інформації в сеансі легко,
і ми робимо це за допомогою знака долара, підкреслення, змінний капітал сесії.
Знак долара, підкреслення, СЕСІЯ-так само, як знак долара, підкреслення, GET
і знак долара, підкреслення, POST-
являє собою асоціативний масив, що складається з пар ключ-значення.
Таким чином, ми можемо використовувати синтаксис, як знак долара, підкреслення, сесія,
кронштейн, цитати, Фу, цитати, кронштейн, одно, цитати, бар, цитата-
для зберігання значення "бар" в ключовому "Foo".
Однак, перш ніж ми можемо писати або читати з масиву сесії,
ми повинні будемо назвати спеціальну функцію-
сесія, підкреслюють, почати, () -
і це буде ініціалізувати сеанс.
Отже, давайте подивимося на прикладі.
Наша перша сторінка, hello.php, використовує сесію для виведення деякі дані для користувача.
Пам'ятайте, ми повинні будемо використовувати session_start перш ніж ми зможемо отримати доступ до будь-якого даних сеансу.
Тепер ми використовуємо Isset PHP, щоб визначити, чи існує ключ
в $ _SESSION асоціативний масив.
Якщо цей ключ існує, це означає, що користувач увійшов в систему,
тому ми будемо відображати ім'я користувача.
Якщо цей параметр не встановлено, це означає, що користувач не увійшли до раніше,
тому ми будемо відображати посилання на login.php.
Так що давайте поглянемо на login.php.
Тут, внизу, у нас є один вид HTML з одним входом.
Атрибут дії форми становить $ _SERVER ['PHP_SELF'],
і це просто означає, що ми хочемо, щоб форма для подання поточного файлу,
який, в даному випадку, є login.php.
Так давайте повернемося до початку цього файлу.
Якщо користувач представив форму, то $ _POST ['ім'я'] повинен бути встановлений.
Додаткові відомості про HTML форм і посади,
перевірити відео Веб-розробка PHP.
У разі, коли користувач зробив уявити форму,
ми хотіли б, щоб записати значення, що вони ввели в в сесії.
Тепер ми можемо перенаправити користувача на hello.php.
Тому що ми зберегли вхід користувача в сесії,
hello.php зможуть отримати доступ до значення, яке було встановлено в login.php.
Так що давайте перевірити це в веб-браузері.
По-перше, ми будемо орієнтуватися на http://localhost/hello.php.
Ми бачимо тут, що ми не увійшли у раніше,
так що давайте натисніть на посилання логін, який буде перенаправляти нас до login.php.
Добре, я буду ввести своє ім'я, яке потім буде зберігатися в сесії.
Відмінно! Тепер ми можемо бачити мій введення від login.php на hello.php через сесії.
Отже, що ж про вхід користувача не вдома?
Ну, для того, щоб увійти користувачеві в, ми просто зберігати значення в імені сеансу.
Таким чином, щоб увійти користувачеві, ми просто повинні видалити цей ключ ім'я
з масиву сеансу.
Так що давайте поглянемо на цей останній файл, logout.php.
Ще раз, ми повинні будемо викликаєте session_start ()
перш ніж ми зможемо зробити що-небудь сесії пов'язані між собою.
Тепер ми можемо просто подзвонити session_destroy (),
який буде дбати про позбавлення від всіх даних у сесії
а потім перенаправити користувача назад в hello.php.
Так що, якщо я натискаю на посилання Вийти,
ми бачимо, що сервер забув, хто я,
ні, і я більше не зайшли
Так що тут відбувається під капотом?
Для того, щоб отримати інформацію про поведінку ми тільки що бачили,
наш сервер повинен зробити 2 речі.
По-перше, сервер повинен якось зберігати дані в сесії.
Різні файли PHP, які містять сайт
виконані у вигляді окремих викликів інтерпретатора PHP
так локальна змінна не може бути розділена між ними.
Замість цього сервер повинен зберігати наші дані сесії
в якомусь місці, що множинні. файли PHP може отримати доступ.
По-друге, сервер повинен зв'язати дані сеансу тільки з моєї сеансу перегляду.
Після авторизації, я Facebook,
Є, ймовірно, мільйони інших людей також зареєстровані в Facebook, в той же час.
Але сервер необхідний спосіб зв'язування мої дані
з моєї нинішньої сесії і даних чужий з іншого сесії.
На щастя, автори PHP думав про все це для нас,
так що ми не повинні реалізувати все це самі.
Але давайте поглянемо на те, що PHP робить за замовчуванням.
Коли я відвідую сторінку PHP, що містить session_start вперше,
PHP буде генерувати велику випадкове значення.
До session_destroy не називається-або я не відвідую ніяких PHP-сторінок на цьому сайті на деякий час-
що випадкова і, ймовірно, унікальне значення буде асоціюватися зі мною.
Таким чином, сервер має якийсь спосіб ідентифікації мій сеансу перегляду
на відміну від чуже.
Ми можемо поглянути на нинішній сесії ID
за допомогою функції PHP, SESSION_ID.
Тут ми просто виводить значення нашого ідентифікатором сеансу.
Так що якщо ми знову ввійти в прикладі веб-додаток,
і тепер перейдіть до sessid.php,
ми побачимо цю довгу рядок символів,
і це поточна ідентифікатор моєї сесії,
і ось як сервер є відстеження, хто я.
Добре, але ми тільки вирішити половину проблеми.
Звичайно, сервер тепер має якийсь спосіб ідентифікації мене,
але, коли я відвідую іншу сторінку, сервер повинен повторно використовувати цей же ідентифікатор
, А не генерації нового.
Пам'ятайте, що якщо я оголосити локальну змінну в foo.php
а потім відвідати bar.php,
bar.php не має можливості дізнатися, що сталося в foo.php.
Так реалізація сесія за замовчуванням PHP вимагає, щоб браузер нагадати сервер
які ідентифікатор сеансу у використанні.
Це реалізовано у вигляді куки.
Печива на додаток до того, смачні закуски-
просто це невеликий текстовий файл на вашому комп'ютері
що сервер може написати через веб-браузер.
Таким чином, після PHP генерує свій унікальний ідентифікатор сеансу через session_start,
він збирається розповісти веб-браузер для зберігання цей ідентифікатор в локальному текстовому файлі або печиво.
Тоді веб-браузер буде включати в себе цей ідентифікатор в кожному запиті
що це робить до сервера.
Так насправді, веб-сервер не пам'ятаючи, хто я.
Замість цього, веб-браузер просто пам'ятаючи унікальний ідентифікатор
, Який був створений на PHP, а потім постійно нагадуючи сервер
що це ідентифікатор.
Таким чином, інформація, як моє ім'я користувача зберігається на сервері не мій веб-браузер.
Браузер просто повідомляє серверу, де PHP збережену цю інформацію
так PHP зможе його відновити.
Тож виникає питання, де PHP насправді зберігання цієї інформації?
За замовчуванням, PHP буде зберігати дані сеансу
у файлі всередині / TMP або папці 'Темп'.
Ім'я цього файлу буде включати ідентифікатор сеансу так PHP можна визначити
який файл для читання і запису за допомогою лише ідентифікатор сеансу.
Добре. Так давайте відкриємо вкладку Мережа відладчик в Chrome
через значок гайкового ключа в правому верхньому куті.
Тепер давайте голову до hello.php знову.
Давайте натиснемо на запит HTTP, щоб hello.php
а потім натисніть на заголовки.
Тут ми можемо бачити, що заголовок печиво містить ключ з ім'ям PHPSESSID,
або PHP ідентифікатор сеансу-зі значенням, яке в той же довга рядок ми бачили
коли ми відвідали sessid.php.
Це саме те, як браузер нагадує серверу, що ідентифікатор сеансу слід використовувати.
Це в тому числі його в заголовку HTTP.
Добре. Давайте голову назад на термінал.
Давайте перейдіть к / TMP, де PHP зберігає інформацію про сеанс за умовчанням.
Звичайно ж, всередині цього тимчасову папку,
ось це файл, який містить ту ж саму точну ідентифікатор сеансу.
Якщо ми відкриваємо цей файл, ми можемо побачити, як РНР представляти свою сесію на диску.
Ось рядок "Томмі" знаходиться на зберіганні ключем «ім'я»,
а це саме те, що ми очікували.
І це огляд сесій в PHP.
Те, що ми тільки що бачили тільки реалізація за замовчуванням сесій.
Насправді, багато веб-сайти змінити цю поведінку за замовчуванням
більш ефективно зберігати PHP сесій
в інтересах підвищення продуктивності.
Мене звуть Томмі, і це CS50.
[CS50.TV]