(low) useCustomPois/customPoisKey: session_id отсутствует в queryKey — кэш может переиспользоваться между сессиями #1484

Closed
opened 2026-06-15 05:57:48 +00:00 by bot-backend · 0 comments
Collaborator

Severity: low · Категория: data-integrity · Файл: frontend/src/hooks/useCustomPois.ts:26-67

frontend/src/hooks/useCustomPois.ts:26-28, 53-68. customPoisKey(parcelCad) = ['custom-pois', parcelCad ?? null] — не включает session_id, хотя список кастомных POI скоупится по сессии через заголовок X-Session-Id (sessionHeaders(), строки 17-20, 60-62). При staleTime 30_000 (стр.66) после смены session_id (clear localStorage → новый crypto.randomUUID в getOrCreateSessionId, либо ручная правка) queryKey остаётся прежним, и TanStack может отдать закэшированные POI предыдущей сессии новой сессии/пользователю. Импакт: рассинхрон кэша между сессиями; на практике редок (id персистится в localStorage, меняется нечасто в рамках вкладки), поэтому low. Чинить: включить session_id в queryKey, например customPoisKey(parcelCad, sessionId) → ['custom-pois', sessionId, parcelCad ?? null], читая getOrCreateSessionId() при сборке ключа (с SSR-guard typeof window).

Почему баг: Ключ кэша не отражает все входные параметры запроса (сессия — фактический параметр через заголовок). Это классический рассинхрон кэша: данные одной сессии переиспользуются в другой. Импакт ограничен тем, что смена session_id в рамках жизни вкладки редка, поэтому low.

Как чинить: Включить session id в ключ: ['custom-pois', parcelCad ?? null, getOrCreateSessionId()] (с SSR-guard), либо инвалидировать весь префикс ['custom-pois'] при смене сессии.


deep-audit «армия ботов 2» · verify+harden, confidence 0.85 · unit U105

**Severity:** low · **Категория:** data-integrity · **Файл:** `frontend/src/hooks/useCustomPois.ts:26-67` frontend/src/hooks/useCustomPois.ts:26-28, 53-68. customPoisKey(parcelCad) = ['custom-pois', parcelCad ?? null] — не включает session_id, хотя список кастомных POI скоупится по сессии через заголовок X-Session-Id (sessionHeaders(), строки 17-20, 60-62). При staleTime 30_000 (стр.66) после смены session_id (clear localStorage → новый crypto.randomUUID в getOrCreateSessionId, либо ручная правка) queryKey остаётся прежним, и TanStack может отдать закэшированные POI предыдущей сессии новой сессии/пользователю. Импакт: рассинхрон кэша между сессиями; на практике редок (id персистится в localStorage, меняется нечасто в рамках вкладки), поэтому low. Чинить: включить session_id в queryKey, например customPoisKey(parcelCad, sessionId) → ['custom-pois', sessionId, parcelCad ?? null], читая getOrCreateSessionId() при сборке ключа (с SSR-guard typeof window). **Почему баг:** Ключ кэша не отражает все входные параметры запроса (сессия — фактический параметр через заголовок). Это классический рассинхрон кэша: данные одной сессии переиспользуются в другой. Импакт ограничен тем, что смена session_id в рамках жизни вкладки редка, поэтому low. **Как чинить:** Включить session id в ключ: ['custom-pois', parcelCad ?? null, getOrCreateSessionId()] (с SSR-guard), либо инвалидировать весь префикс ['custom-pois'] при смене сессии. --- <sub>deep-audit «армия ботов 2» · verify+harden, confidence 0.85 · unit U105</sub>
bot-backend added the
week ревью 1
label 2026-06-15 05:57:48 +00:00
bot-backend added the
scope/backend
label 2026-06-15 11:02:12 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1484
No description provided.