PioBia
11.06.2014, 19:50:35
Witam serdecznie
Prowadzę niewielki sklep internetowy napisany przeze mnie. Kod piszę na lokalnej stacji, gdzie mam zainstalowanego LAMP-a (Debian+LAMP). W php.ini ustawiłem czas sesji na 6 godzin.
Działanie sklepu: pierwsza linijka każdej strony rozpoczyna się session_start() - odwiedzający ma zatem przez cały okres odwiedzin nawiązaną sesję i przydzieloną zmienną sesji. W chwili gdy wrzuca coś do koszyka w tabeli KOSZYK tworzony jest rekord identyfikowany właśnie zmienną sesji.
Na lokalnej maszynie wszystko działa jak należy. Odwiedzający wrzuca produkty do koszyka, wraca do komputera po 3 godzinach i sesja wciąz jest aktywna, a on wciąz ma dostęp do koszyka.
Problem pojawił się, kiedy kod zaczął pracować na serwerze internetowym (wilk.ionic.pl). Na moją prośbę administator wydłużył czas trwania sesji do 3 godzin. Sprawdziłem to prostym skryptem wyświetlającym identyfikator sesji i godzinę. Po 2 godzinach identyfikator sesji pozostakje bez zmian. Ale... zarówno zalogowani użytkownicy, jak i klienci wrzucający produkty do koszyka tracą sesję po około 15 minutach. Dlaczego? Jakiś pomysł? Czy jest to kwestia ustawień php.ini, czy ja źle obsługuję sesję?
pozdrawiam!
adbacz
12.06.2014, 21:12:43
Prawdopodobnie jest problem na serwerze. Zamiast przechowywać dane sesji przez cały czas ich trwania - serwer usuwa je przed czasem ich wygasnięcia. Możesz sprawdzić działanie sesji (skryptu) na jakimś darmowym serwerze z PHP, na przykład CBA (PL), x10hosting (EN) i w tedy będziesz miał pewność - jeśli będzie tam działać - wina serwera, jeśli nie będzie - wina skryptu. Trzeba potestować...
PioBia
12.06.2014, 22:16:29
Serwer może się tak zachowywać, pomimo ustawionej zmiennej session.gc_maxlifetime na 10800? Jaki wpis może powodować, ze serwer nie trzyma danych sesji? Podkreślam - prosty skrypt pokazuje, ze po upływie 1-2 godzin zmienna sesji pozostaje bez zmian.
Jeszcze jedna myśl - strona jest testowana na serwerze postawionym na mojej maszynie (Debian+LAMP). Tam wszystko działa bez zarzutu.
adbacz
13.06.2014, 18:04:48
Ja tu nie mówię o czasie trwania sesji - jak mówisz, ona działa ok, bo ID sesji się nie zmienia. Ale zmienia się za to treść sesji, czyli dane przypisane do danej sesji - one poprostu znikają. Za to chyba nie jest odpowiedzialna żadna z wartości w pliku php.ini
TwojPan
13.06.2014, 18:43:24
ini_set('session.gc_maxlifetime', 10800);
session_set_cookie_params(180);
a potem sprawdz:
echo ini_get("session.gc_maxlifetime");
PioBia
16.06.2014, 22:35:27
Administratorzy odpuścili poszukiwanie przyczyn, serwis został przeniesiony na inny serwer tej firmy. I problem zniknął. Takie rozwiązanie mi odpowiada - naczelny cel to działanie serwisu, a nie dociekanie DLACZEGO.
Dziękuję wszystkim za pomoc, pozdrawiam!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.