Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Niekończąca się sesja
bartek624
post 28.05.2012, 19:18:58
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 28.05.2012

Ostrzeżenie: (0%)
-----


Witam, dopiero uczę się pisania w php i napotkałem na problem do którego nigdzie nie mogę znaleźć podpowiedzi. Chodzi o to że napisałem system logowania w którym po zweryfikowaniu użytkownika do zmiennej sesyjnej 'uzytkownik' zapisywany jest jego login. Wszystko świetnie działa tylko że jeśli użytkownik się nie wyloguje (funkcja wylogowująca niszczy sesje) to sesja trwa nawet po ponownym włączeniu komputera . czytałem ze sesja powinna 'ulegać samozniszczeniu' po zamknięciu strony/przeglądarki ale u mnie tak nie jest. używam KrasnalServ a tu kilka skryptów i część php.ini:

zwykły session_start
  1. session_register("uzytkownik");
  2. if (empty($_SESSION['uzytkownik']))
  3. $_SESSION['uzytkownik']='nie_zalogowany';



php.ini
Kod
session.save_handler = files
session.save_path =c:\usr\sesje
session.use_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.serialize_handler = php
session.gc_probability = 1
session.gc_maxlifetime = 1440


Pomocy wink.gif
Go to the top of the page
+Quote Post
help_mee
post 29.05.2012, 05:36:01
Post #2





Grupa: Zarejestrowani
Postów: 244
Pomógł: 21
Dołączył: 10.02.2008
Skąd: Załęcze Wielkie

Ostrzeżenie: (0%)
-----


Skąd wiesz, że sesja trwa. Pokaż jak to sprawdzasz (jakim skryptem)?


--------------------
Amentis dolet!
Deus et patria!
» Pomogłem? Kliknij Pomógł.
Go to the top of the page
+Quote Post
IProSoft
post 29.05.2012, 13:18:51
Post #3





Grupa: Zarejestrowani
Postów: 479
Pomógł: 97
Dołączył: 6.09.2011
Skąd: php.net :)

Ostrzeżenie: (0%)
-----


A może używasz Firefoxa, który potrafi zapamiętywać sesje nawet po wyłączeniu komputera?


--------------------
Manual prawdę Ci powie.
Go to the top of the page
+Quote Post
bartek624
post 29.05.2012, 14:41:20
Post #4





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 28.05.2012

Ostrzeżenie: (0%)
-----


To że sesja trwa wiem bo po zalogowaniu (przypisaniu do zmiennej sesyjnej 'uzytkownik' loginu użytkownika) i wyłączeniu przeglądarki, Krasnalserva i potem komputera to po 12 godzinach jak włączyłem kompa , krasnalserva i wszedłem na stronkę to nadal byłem zalogowany ($_SESSION['uzytkownik'] nadal miało wartość loginu). A używam google chrome'a .
Go to the top of the page
+Quote Post
greycoffey
post 29.05.2012, 19:13:35
Post #5





Grupa: Zarejestrowani
Postów: 320
Pomógł: 29
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----


Bo się nie wylogowałeś?
Go to the top of the page
+Quote Post
bartek624
post 29.05.2012, 19:32:04
Post #6





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 28.05.2012

Ostrzeżenie: (0%)
-----


No ale jeśli dobrze wszystko rozumiem (co jest raczej mało prawdopodobne) to sesja powinna się zniszczyć po zamknięciu przeglądarki? A jeśli źle rozumiem to co zrobić żeby tą sesje zniszczyć po jakimś czasie lub właśnie po wyjściu z przeglądarki? ? wink.gif
Go to the top of the page
+Quote Post
greycoffey
post 29.05.2012, 19:39:32
Post #7





Grupa: Zarejestrowani
Postów: 320
Pomógł: 29
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----


Kurczę, do tego momentu wydawało mi się, że swietnie znam zagadnienie sesji i jej domyślnej implementacji w PHP. Nigdzie nie mogę znaleźć szczegółów na jakiej podstawie ta sesja miałaby wygasać po wyłaczeniu przeglądarki. Identyfikator to ciastko jak każde inne, przeglądarka nie ma jakiś triggerów informujących strony, że je opuszcza, przecież co będzie w przypadku zaniku prądu?

Jedyne co mi przychodzi do myśli, to czas życia ciastka oraz sesji. Garbage collector uruchamia się co X/Y żądańi sprząta wszystko powyżej Z sekund - tzn:
session.gc_probability = 1
session.gc_divisor = 100
session.gc_maxlifetime = 1440
Tzn. jest 1% szans, że podczas jednego uruchomienia sesji funkcją session_start() dla jakiejkolwiek sesji (nie musi być to ta, która przemija), sesje które przkroczyły czas 1440s od ostatniej (akcji? modyfikacji?) są sprzątane. W twoim przypadku garbage collector mógł się po porstu nie wywołać.
Go to the top of the page
+Quote Post
by_ikar
post 30.05.2012, 09:02:37
Post #8





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Czas życia ciastka jest tutaj istotny. Sprawdź w chrome (f12 -> zakładka resoruces -> cookies) jaki jest czas życia tego ciastka. Jeżeli Expires jest równe Session, to po zamknięciu przeglądarki ciastko powinno się samo usunąć. Jeżeli ma inną wartość niż Session, to znaczy że czas podczas tworzenia ciasteczka sesyjnego jest inny. Aby ciastko się kasowało podczas zamykania przeglądarki lifetime musi być równe 0.

Spróbuj przed session_start, wywołać session_set_cookie_params z parametrem 0. Czyli:

  1. <?php
  2.  
  3. session_register('uzytkownik');
  4. if(empty($_SESSION['uzytkownik']))
  5. {
  6. $_SESSION['uzytkownik'] = 'nie_zalogowany';
  7. }
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 09:15