Samowystarczalna lokalna symulacja w JavaScript. Serwer dostarcza plik, lecz nie uwierzytelnia użytkownika, nie zapisuje kont i nie wysyła poczty. Cookie i klucz są jawne, modyfikowalne i nie zapewniają ochrony. Nie używaj danych prawdziwego konta. Kod jest ćwiczeniem diagnostyki, nie implementacją produkcyjnej sesji.
Uruchomienie
W katalogu projektu uruchom node tools/serwer-lekcji.cjs, chyba że serwer już działa. Otwórz http://127.0.0.1:8787/content/cwiczenia/sesja-demo/lab.html. Plik laboratorium otwieraj przez lokalny HTTP, nie przez file://. Potrzebujesz współczesnej przeglądarki z włączoną pamięcią witryny.
Kliknij „Resetuj ćwiczenie”. Reset usuwa wyłącznie cookie i klucze prefiksu qa_session_demo_. Nie czyści całej pamięci originu. Odśwież inne otwarte karty, ponieważ stan zmiennych i sessionStorage jest odrębny. Zegar testowy działa w bieżącej karcie; odświeżenie przywraca przesunięcie 0.
Specyfikacja
- Jedno syntetyczne konto
tester, początkowy jawny kluczdemo-start. Klucz porównywany z uwzględnieniem wielkości liter. - Błędna nazwa albo klucz daje „Niepoprawne dane demo”, bez dostępu.
- Udany login zapisuje cookie demo
qa_session_demo_sessioni daje dostęp na 120 sekund. Wylogowanie powinno usunąć cookie i dostęp. - Prośba o reset dla dowolnej nazwy daje ten sam komunikat. Kod powstaje wyłącznie dla
tester, jest widoczny w jawnej skrzynce testowej, ważny 60 sekund i jednorazowy. - Nowy klucz wybierasz z
demo-nowyidemo-drugi. Zmiana usuwa cookie i wymaga ponownego loginu. Wybrany klucz jest przechowywany w sessionStorage tylko na potrzeby tej karty demo. - Zapamiętana nazwa i motyw są w localStorage; notatka w sessionStorage. Odświeżenie zachowuje oba magazyny, niezależna nowa karta tego samego originu ma wspólny motyw i pustą notatkę.
- Cookie ustawiane przez JavaScript ma Path
/content/cwiczenia/sesja-demo/i SameSite=Lax; nie ma HttpOnly ani Secure. Terminuntilto własna reguła demo, nie data wygaśnięcia cookie. Nie dowodzi bezpieczeństwa prawdziwej sesji.
Zadanie
Sprawdź poprawny i błędny klucz, wielkość liter, logout z odświeżeniem, wygaśnięcie sesji, kod błędny/wygasły/użyty powtórnie oraz dane obu magazynów w dwóch kartach. Dla każdej próby zapisz stan startowy, kroki, wynik i wymaganie. Użyj checklisty. Podgląd pamięci odświeżaj przyciskiem; w drugiej karcie UI nie aktualizuje się automatycznie po zmianie motywu.
Rozwiązanie — trzy celowe defekty
- Po resecie
tester/DEMO-STARTdaje dostęp. Wymaganie rozróżnia wielkość liter, ale porównanie w kodzie sprowadza oba klucze do małych liter. - Zaloguj się, kliknij „Wyloguj”, odśwież stronę i „Otwórz panel prywatny” przed upływem 120 s. Dostęp wraca. Logout zmienił napis w UI, lecz nie usunął cookie. Naprawa demo: wywołanie
removeSession(); w prawdziwym systemie trzeba unieważnić również sesję po stronie serwera. - Poproś o kod dla
tester, skopiuj go, wybierzdemo-nowy, zatwierdź, następnie wybierzdemo-drugii użyj tego samego kodu przed 60 s. Druga zmiana przechodzi. Naprawa demo: wyzerowaćtokenpo pierwszym użyciu; w produkcie konsumpcja tokenu wymaga atomowej kontroli serwera.
Przesunięcie o 121 s poprawnie blokuje sesję oraz kod. Po zmianie klucza stary jest odrzucany, nowy przyjmowany. Zapisana notatka zostaje po reload tej karty; niezależna nowa karta ma pustą notatkę i wspólny motyw. To kontrolne wyniki poprawne, potrzebne do odróżnienia defektu od zamierzonej reguły.
Rzeczywista weryfikacja
2 października 2026: Playwright, headless Chromium 151.0.7922.34, lokalny HTTP port 8787. node tools/test-sesja.cjs zakończył się PASS: wszystkie trzy defekty odtworzone, błędne dane odrzucone, czas sesji i kodu sprawdzony, stare/nowe dane zweryfikowane, reload i niezależna karta sprawdzone. Brak błędów JavaScript oraz poziomego przepełnienia przy 360 px. Rzeczywisty zrzut widoku mobilnego jest dowodem z automatyzacji.
Nie testowano fizycznego telefonu, menedżera haseł, czytnika ekranu ani innych silników przeglądarek. Nie ma prawdziwego API, dostarczenia wiadomości, blokady nadużyć, MFA, TLS ani autoryzacji zasobów serwera. Są to ograniczenia modelu, a nie dodatkowe celowe defekty do odkrycia.
Powiązane lekcje: testowanie logowania i resetu, cookies i pamięć przeglądarki.
