sesja nigdy nie powinna sama wygasnąć
Używam funkcji logowania w mojej witrynie z sesją. Ta moja sesja wygasła po kilku minutach, niezależnie od tego, czy użytkownik się wylogował, czy nie. Teraz chcę, aby sesja wygasła Tylko wtedy, gdy użytkownik wyloguje się.Jeśli użytkownik nie wyloguje się z konta, a następnie wraca po 2-3 dniach nawet wtedy powinien pojawić się zalogowany.
Znalazłem kilka przykładów, w których podali czas wygaśnięcia sesji, ale chcę, aby wygasła ona tylko w dzienniku out event przez Użytkownika bez względu na czas potrzebny na wylogowanie.
Jak mogę to zrobić??Edit:
session_cache_expire(0);
session_start();
Czy to jest sposób zapisu, aby to zrobić ?
3 answers
Rozwiązaniem często stosowanym w tej sytuacji jest :
- mają niezbyt długi czas trwania sesji : wygaśnie, jeśli użytkownik nie jest aktywny (tak to działa-i to jest lepsze dla Twojego serwera, jeśli masz wielu użytkowników)
- Kiedy użytkownik loguje się, ustawiasz plik cookie, który zawiera to, co jest potrzebne do jego rozpoznania
- jeśli wróci na stronę (z ciasteczkiem i bez aktywnej sesji), korzystasz z informacji zawartych w tym cookie, aby automatycznie go zalogować, ponownie tworząc sesję w tym samym czasie.
W ten sposób:
- nie masz tysięcy sesji "aktywnych" bez powodu
- zachowujesz standardowy sposób pracy sesji
A Ty masz tę zaletę, że "nigdy nie jesteś ograbiony", przynajmniej z punktu widzenia użytkownika.
Należy również pamiętać, że w przypadku" normalnych " sesji, plik cookie zawierający identyfikator sesji zostanie usunięty, gdy użytkownik zamknie przeglądarkę - więc będzie odłączony, bez względu na czas trwania sesji.
Z rozwiązaniem, które proponuję, to Ty ustalasz, jak długo plik cookie powinien pozostać na komputerze użytkownika; -)
Oznacza to jednak, że gdy użytkownik ręcznie loguje się, musisz oczywiście usunąć zarówno jego sesję, jak i plik cookie-aby nie był natychmiast automatycznie zalogowany.
Oczywiście musisz uważać na to, co ustawiasz w pliku cookie : plik cookie nie jest do końca bezpieczny, więc nie przechowuj hasło w nim np.; -)
W rzeczywistości w ten sposób często działa funkcja "Zapamiętaj mnie"; z wyjątkiem tego, że tutaj użytkownicy nie będą musieli zaznaczać pola wyboru, aby aktywować "Zapamiętaj mnie"; -)
Jeśli nie masz czasu na rozwijanie tego typu rzeczy, dość szybkim i brudnym sposobem jest użycie żądania Ajax na wszystkich swoich stronach, które po prostu "pinguje" stronę PHP na serwerze - to utrzyma sesję aktywną (ale nie jest to całkiem dobry sposób na zrobienie rzeczy : nadal będziesz miał wiele sesji na serwerze, będziesz miał wiele bezużytecznych żądań... i będzie działać tylko tak długo, jak użytkownik nie zamknie swojej przeglądarki).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-25 10:28:21
Nie możesz tego zrobić z samą obsługą sesji wewnętrznej PHP. PHP zawsze wysyła identyfikator sesji w pliku cookie sesji, który wygaśnie, gdy użytkownik zamknie przeglądarkę. Aby uzyskać pewien rodzaj automatycznego logowania, potrzebny jest kod towarzyszący, który ustawia długotrwały plik cookie w przeglądarce użytkownika i obsługuje rozpoznawanie tych plików cookie i mapowanie między wartością plików cookie A odpowiednim kontem użytkownika.
Należy pamiętać, że w znacznym stopniu wpływa to na kwestie bezpieczeństwa, więc będziesz musiał zająć się wieloma rzeczami. Przeczytaj, jak może działać funkcja automatycznego logowania:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-25 10:30:01
Czy usuwasz pliki cookie podczas testowania? Czy pliki cookie są włączone? Czy destory sesji gdzieś w swoim kodzie?
Zobacz także moją odpowiedź na inny post: szybkie Pytanie o sesje w PHP , które wyjaśnia, jak pozostać zalogowanym. Po prostu nie rób zadania cronjob / sheduled, jeśli chcesz, aby użytkownik pozostawał zalogowany na zawsze.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:30:39