TemplateEngine.md 4.3 KB

Сессии, Куки, Формы и Шаблонизация

Сегодняшнее занятие будет посвящено взаимодействию с пользователем и браузером пользователя. Будут рассмотрены механизмы персонализации сгенерированных PHP страниц, прием данных от пользователя, верстка и шаблонизация.

Сессии и Куки

HTTP

HTTP - протокол, изначально предназначенный для работы в режиме запрос -> ответ, после чего соединение закрывается (вспомним о том, что изначально HTTP - просто средство выдачи страниц для чтения, не более того).

Например

Запрос:

GET / HTTP/1.1
Host: example.com
Accept: text/html
 
<пустая строка>

Ответ:

HTTP/1.1 200 OK
Content-Length: 1983
Content-Type: text/html; charset=utf-8
 
<html>
<head>...</head>
<body>...</body>
</html>

Таким образом, запрос и ответ состоят из стартовой строки(GET), заголовков (Content-Length), и собственно контента, ради которого весь этот обмен данных был сделан (html-файл).

По окончанию обмена данными соединение разрывается, и следующее обращение к серверу происходит с чистого листа.

Сессия и Cookie

Под сессией подразумевается определенный контекст, в котором происходит обмен данными между клиентом (браузером) и сервером. В этом контексте хранится определенная информация, касающаяся только конкретного клиента (например залогиненного пользователя: логин, пароль, личная переписка и другая персональная информация). Как это работает:

  • При создании сессии (например, при удачном логине) сервер создает уникальный ключ. Ключ должен быть достаточно большим, что бы его было крайне маловероятно подобрать.
POST /login/ HTTP/1.1
Host: example.com
Accept: text/html
 
login=user&password=eightasterisks
  • Ключ отсылается в браузер в заголовке вместе с ответом. Браузер запоминает его на определенное время для определенного URL
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Set-Cookie: key=LongAndWeirdRandomSecureCharset
 
<html>
<head>...</head>
<body>...</body>
</html>
Обратите внимание на заголовок **Set-Cookie**. Именно он в себе хранит уникальный ключ, который будет запомнен браузером
  • Браузер при каждом запросе к серверу отсылает ему этот ключ, подтверждая таким образом, что данное соединение - от конкретного пользователя.
GET / HTTP/1.1
Host: example.com
Accept: text/html
Cookie: key=LongAndWeirdRandomSecureCharset


PHP

Исторически сложилось, что PHP работает так же, как и протокол HTTP - скрипт запускается по запросу, отрабатывает, отдает ответ и умирает. Соответственно, сессия, как средство сохранения контекста между обращениями к скрипту, организуется в ручном режиме.

<?php
session_start();

Код выше осуществляет "старт" сессии - генерацию ключа и отправку его вместе с заголовком для текущего ответа