docs: decide item B.1 — persistent sessions with a sliding idle window
Sessions move from the in-memory map to a `sessions` table (migration 0002), so a restart, a redeploy or a restore from a full backup no longer signs the administrator out. The row holds a SHA-256 of the token rather than the token itself: a stolen database file or backup archive cannot be replayed into a login, while the browser that still holds the cookie keeps working across a restore. The 12-hour absolute TTL becomes a sliding 7-day idle window, configurable through PANEL_SESSION_IDLE_DAYS (whole days, mirroring SEND_LOG_RETENTION_DAYS). No absolute cap: for an administrator who visits regularly the session lasts indefinitely, which is the accepted trade-off. The four `every 5s` monitoring fragments deliberately do not renew it — otherwise a forgotten open tab would hold the session open forever and the window would mean "seven days without an open tab" rather than "seven days without the administrator". Decision only; no code yet. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -35,6 +35,7 @@
|
||||
## Текущее состояние
|
||||
|
||||
- **Выполнено и принято:** базовый линейный план 0→11 (v1.0; аудит безопасности ТЗ 7.6 — полное соответствие), Фаза 12 (UI/UX), Фаза 13 (страница `/status`, DNS-проверки домена) и Фаза 14 (security-заголовки, проверка origin, cookie `__Host-` + обнаружение дублей, документация про `/data/setup-token`). Что именно сделано — в `git log` и `CHANGELOG.md`, здесь не дублируется.
|
||||
- **Решено, но ещё не реализовано:** пункт **B.1** плана — сессии переезжают в SQLite (скользящий срок бездействия 7 дней, `PANEL_SESSION_IDLE_DAYS`, опросы не продлевают, смена пароля разлогинивает всех). Параметры согласованы полностью, кода нет: делать отдельным шагом.
|
||||
- **Дальше — то, что перечислено в `implementation-plan.md`:** открытые вопросы разделов B–D (надёжность и эксплуатация, e2e в CI, указатель на объём 2.x) и принятые риски раздела A (`POST` без `Sec-Fetch-Site`/`Origin` пропускается, токенов нет); опциональная **Фаза O1+** (входящий релей, линия 2.x.x, требует согласования).
|
||||
- **Прод:** `selfpost.example.com`, реальный Let's Encrypt сертификат, живой e2e (DKIM/SPF pass). Контейнер там всё ещё на образе v1.0 — Фаза 14 в него не выкатывалась. При апгрейде: админа один раз разлогинит (сменилось имя cookie), а от reverse-proxy требуется передача исходного `Host` (Apache-фрагмент из `deploy/` это делает).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user