PHP8.2+, session/hash/json. Только локальный учебный сервер.
1. Распакуйте архив, откройте терминал именно в его каталоге.
2. php setup.php — создаст private/users.json и private/sessions/.
3. php -S 127.0.0.1:8793 -t public
4. http://127.0.0.1:8793/login.php — anna / Локальный кабинет 2026!
5. Сначала неверный пароль; затем правильный; затем кнопка Выйти.
6. Для проверки времени остановка сервера не нужна: php clock.php 1000,
   войдите заново; php clock.php 1030, обновите account.php — срок истёк.
   Отсутствие private/clock.txt включает реальные time() и idle30/absolute120 секунд.
Состояние и хеш лежат ВНЕ public. Не меняйте корень сервера на папку архива.
HTTP localhost: Secure=false намеренно. Для реального HTTPS требуется Secure=true,
реальное хранилище аккаунтов, ограничение попыток по аккаунту/сети, восстановление,
MFA при необходимости, журнал без паролей/ID/токенов, отзыв всех устройств.
Это не готовая production-система входа. Повторный setup меняет только учебный хеш.
Ctrl+C останавливает сервер. Не используйте свои реальные пароли в этой лаборатории.

Автоматическая HTTP-проверка после запуска сервера: python probe_http.py project
При другом порте задайте PHP_MANUAL_HTTP_URL=http://127.0.0.1:PORT.
