Самоучитель: PHP под капотом: runtime и стандартная библиотека
Глава 14 из 20IV. Потоки и протоколы135 минут

Глава 14. HTTP, cookie, сессии и безопасные загрузки

Браузер хранит идентификатор и отправляет сообщение; сервер заново проверяет каждое поле, право, лимит и переход состояния.

После главы вы сможете
  • развести cookie и session
  • контролировать headers
  • обезвреживать upload path

Ответ начинается до первого байта тела

header и setcookie работают, пока вывод не начался. Случайный пробел, BOM или warning нарушает возможность установить статус. Pulse строит Response value и единственный emitter отправляет status, headers и body в правильном порядке.

Output buffering может помочь композиции, но не должен скрывать ранний вывод как норму. В production display_errors выключен, а шаблон получает готовую view model.

Путь загруженного файла

Безопасный импортИмя и MIME клиента не определяют путь или тип; обработка идёт после серверной проверки.RequestlimitsUPLOAD_ERRstatusTemp fileserverInspectsize/MIMEMoveprivateQueueprocess
Имя и MIME клиента не определяют путь или тип; обработка идёт после серверной проверки.

Cookie не является сессией

Cookie session id — случайный ключ, а данные сессии хранятся сервером. После входа идентификатор регенерируется, cookie получает Secure, HttpOnly и подходящий SameSite. Значение session не содержит пароль, роль или право в форме, которой сервер обязан верить.

Session lock способен сериализовать параллельные запросы одной сессии. После чтения нужного состояния lock закрывают, если дальнейшая работа долгая. Предметные данные Pulse остаются в базе.

Partitioned и срок жизни

PHP 8.5 добавил поддержку атрибута partitioned в setcookie options. Он решает конкретные сценарии third-party контекста и не заменяет Secure или SameSite policy. Применение проверяется на реальном browser contract.

Срок cookie, срок server session и срок предметного доступа — три разные величины. Logout удаляет server state и отправляет expired cookie с теми же path/domain options.

Загрузка — поток недоверенных байтов

Проверяются UPLOAD_ERR, фактический размер, общий post_max_size, MIME через содержимое и предметный формат. Оригинальное имя используется только как очищенная подпись, а физическое имя создаёт сервер. Файл хранится вне web-root и никогда не include/require.

CSV или NDJSON обрабатывается ограниченными строками. Archive требует лимита числа записей, распакованного объёма, вложенности и запрета traversal. Async-очередь не отменяет проверку перед постановкой.

Лаборатория

Создайте форму импорта Pulse с PRG. Проверьте пустую загрузку, превышение лимита, ложное расширение, повтор POST и попытку передать имя ../report.php.

  • Нет серверного eval или include загруженного пути.
  • Повтор refresh не создаёт второй импорт.
  • Session lock не держится во время обработки файла.
Локальный прогресс

Закрепите материал

Отметка, заметка, чек-лист и ответы остаются в localStorage этого браузера и не отправляются в аналитику.

Контрольная карта лаборатории

Выполнено: 0 из 3

Локальный тест

1. Где хранятся основные данные server session?
2. Можно ли include загруженный PHP-файл после MIME-проверки?

Перелинковка со справочником

Проверка актуальности

  • php.nethttps://www.php.net/manual/en/book.session.phpПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
  • php.nethttps://www.php.net/releases/8.5/en.phpПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
  • php.nethttps://www.php.net/manual/en/book.filesystem.phpПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.

Текст и схемы созданы для этого самоучителя без воспроизведения страниц, иллюстраций и листингов приложенной книги. Проверено: .

Данные этого сервиса

Настройки cookie и локальных данных

Аналитика

Текущий статус: не выбран. До согласия обе аналитические системы не загружаются.

Локальные данные

Удаление затрагивает только ключи PHP-сервиса в этом браузере и требует подтверждения.

Политики

Политика конфиденциальности · Политика использования файлов cookie