Mam aplikację PHP, która wymaga logowania, oferuje opcję wylogowania i wymusza wylogowanie użytkowników, którzy byli nieaktywni przez X minut.
Ale jeśli się zaloguję, zamknę przeglądarkę i ponownie ją otwórz, zmienne $_SESSION nadal istnieją.
Jaka jest tutaj ogólna praktyka? Czy powinienem chcieć temu zapobiec, a jeśli tak, to w jaki sposób?
Coś we mnie po prostu chce traktować zamknięcie przeglądarki jako wylogowanie… z jednej strony jest to bezpieczna aplikacja (ponieważ wymaga logowania), ale użytkownik bez technologii może rozsądnie oczekiwać, że jeśli zamknie całą przeglądarkę, to nikt nie może zobaczyć ich prywatne dane. Otoh, jeśli przeglądarka ulegnie awarii, a użytkownik ją zrestartuje, może mieć nadzieję, że wznowi to od miejsca, w którym przerwał...
Co robią inni?
3 odpowiedzi
Sesje PHP działają poprzez zapisanie w przeglądarce użytkownika pliku cookie zawierającego identyfikator sesji na serwerze. Dlatego sesje PHP działają dokładnie tak, jak zwykłe pliki cookie.
Jeśli zamkniesz przeglądarkę, pliki cookie są trwałe. Serwer nie wie, jakiego wystąpienia przeglądarki używa użytkownik, czy przeglądarka została ponownie uruchomiona, a nawet czy komputer został ponownie uruchomiony.
Udostępnienie przycisku wylogowania jest tutaj najczęstszą praktyką, ale jeśli z jakiegoś powodu chcesz, aby użytkownik wylogował się po zamknięciu przeglądarki, będziesz musiał zaimplementować coś po stronie klienta, ponieważ przeglądarka tego nie robi wyślij dowolny sygnał do serwera po jego zamknięciu.
Jeśli obawiasz się o bezpieczeństwo - tzn. programujesz wysoce bezpieczną aplikację, taką jak bramka płatnicza - możesz postępować zgodnie z praktyką stron internetowych banków lub innych bramek płatniczych;
Gdy użytkownik powraca do witryny, nadal jest zalogowany, ale gdy próbuje wykonać jakąkolwiek czynność, która wpłynie na zalogowanego użytkownika, ponownie uwierzytelnij się za pomocą innego ekranu hasła lub poproś o kilka niezapomnianych informacji.
To klasyczne zachowanie, możesz je zaobserwować na wielu stronach, w tym na Stack Overflow :) Twoja zmienna sesji jest powiązana z plikiem cookie w przeglądarce. Jeśli chcesz, aby użytkownik naprawdę był wylogowany po zamknięciu przeglądarki, ustawia czas sesyjnego pliku cookie na zero.
Gdy wyraźnie ustawisz plik cookie, możesz wybrać jego czas wygaśnięcia. Kiedy używasz session_start() do wygenerowania pliku cookie sesji, jego czas wygaśnięcia jest określany przez wartość session.cookie_lifetime w php.ini. Jeśli ustawisz to na 0, sesyjne pliki cookie wygasną po zamknięciu okna przeglądarki.
Podobne pytania
Nowe pytania
php
PHP to szeroko stosowany, wysokopoziomowy, dynamiczny, zorientowany obiektowo i interpretowany język skryptowy przeznaczony głównie do tworzenia stron WWW po stronie serwera. Używane w przypadku pytań dotyczących języka PHP.