Ja bym nie odsyłał kolegi do studiowania jakiś skryptów, bo nie doświadczonej osobie ciężko będzie czasem w nich się połapać. Zwłaszcza że często są mocno rozbudowane, korzystają z różnych oddzielnych funkcji itd.
Może przyda się krótkie objaśnienie:
Uruchomienie sesji w PHP powoduje zapisanie pliku cookie z identyfikatorem sesji
PHPSESSID.
Istotne są tutaj dwa parametry:
1. czas życia sesji
2. czas ważności cookieWbrew pozorom nie oznaczają tego samego.
1. Czas życia sesji domyślnie jest ustawiony w PHP na 1440 sekund (czyli 24 minuty). Po 24 minutach bezczynności użytkownika ważność sesji wygasa, co w praktyce ma przełożenie na wylogowanie. NIE oznacza to, że sesja jest ważna 24 minuty od zapisania cookie czyli od zalogowania się, bez względu na poczynania użytkownika! Po każdym uruchomieniu session_start() czyli w praktyce kliknięciu czegokolwiek na stronie, czas liczy się od nowa.
2. Czas ważności cookie domyślnie jest ustawiony na zero. Gdy jest równy zero zamknięcie przeglądarki powoduje skasowanie pliku cookie, co w praktyce ma przełożenie na wylogowanie. Dopóki użytkownik jest na stronie - cookie jest ważne cały czas, bez limitu. Jeżeli ustawimy czas ważności cookie na np. 3 godziny to po zamknięciu przeglądarki i ponownym otwarciu strony będzie on dalej zalogowany. Ale na drugi dzień już nie.
Ten parametr warto ustawiać np na miesiąc jeżeli użytkownik zaznaczy opcję "zapamiętaj mnie" podczas logowania.
Uwaga!Zamknięcie przeglądarki kasuje cookie, ale nie robi tego zamknięcie panelu w przeglądarce.
Oba parametry możemy zmienić za pomocą funkcji
ini_set(). Odpowiednio:
Kod
1. ini_set('session.gc_maxlifetime', 3600); //czas trwania sesji ustawiamy na 1 godzinę
2. ini_set('session.cookie_lifetime',3600); //ważność cookie ustawiamy na 1 godzinę
Niestety, są serwery na których funkcja ini_set nie działa (została wyłączona przez administratora). W takim wypadku nic nie można poradzić na krótki czas życia sesji
Czym skutkuje krótki czas życia sesji?
Zależy od tego co robić może użytkownik. Np. mamy na stronie forum. Użytkownik zalogował się, zaczyna pisać bardzo długi post. Po 20 minutach odchodzi od komputera i wraca za godzinę. Kończy post i klika "zapisz". Wtedy pojawia się komunikat "nie jesteś zalogowany". Użytkownik rozbija monitor lub dzwoni do nas (wykonawcy) z epitetami.
Trzeba zatem przewidzieć taką sytuację i odpowiednio napisac skrypty żeby wyłapały taki tekst i go przywróciły. Tak jest, o ile się nie mylę, na tym forum.
Podsumowując:Sesje są zalecane jako bezpieczniejsze, ale jeżeli chcesz mieć uniwersalny kod działający płynnie na każdym serwerze, z możliwością regulowania czasu zalogowania, to lepiej jest skorzystać z cookie.
Korzystanie z obydwu rozwiązań najlepiej zgłębić na php.net. W skrócie:
Wartości zmiennych odczytujemy z:
1. $_SESSION['zmienna'];
2. $_COOKIE['zmienna'];
a zapisujemy:
1. $_SESSION['zmienna'] = "moja wartosc";
2. setcookie("zmienna","moja wartosc",0); //czas ważności cookie to zero