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ć ?

Author: developer, 2009-08-25

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).

 25
Author: Pascal MARTIN,
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:

 2
Author: Stefan Gehrig,
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.

 0
Author: Community,
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