[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]