TemplateEngine.md 3.5 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

... ...

Обратите внимание на заголовок **Set-Cookie**. Именно он в себе хранит уникальный ключ, который будет запомнен браузером
- Браузер при каждом запросе к серверу отсылает ему этот ключ, подтверждая таким образом, что данное соединение - от конкретного пользователя.

GET / HTTP/1.1 Host: example.com Accept: text/html Cookie: key=LongAndWeirdRandomSecureCharset

```