Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wygasniecie session_id
Forum PHP.pl > Forum > Przedszkole
Konradek
Witam wszystkich,

Czy możecie mnie pokierować na właściwe tory.

mam problem z session id.
Zapisuję ja w bazie danych, zaraz po zalogowaniu się użytkownika i następnie kierując się session id, pokazuję aktualnie zalogowanych userów.
Tylko, jest problem kiedy dany user nie wylogowuje się (brak kliknięcia wyloguj, gdzie niszcze sesje i nadpisuje w bazie session id na NULL), tylko zamyka przeglądarkę.

session id nie jest usuwane z bazy i na stronie mam zalogowanych użytkowników, których już dawno nie ma smile.gif

Proszę o podanie jakiegoś sposobu na ten fenomen smile.gif

Z góry dziękuję

Konradek
sowiq
Po pierwsze nie wiem po co zapisywać sid do bazy danych, skoro równie dobrze możesz zapisywać potrzebne dane w tablicy $_SESSION ?

Ale jeśli koniecznie chcesz tak robić to jest prosta metoda na Twój problem - razem z sid zapisuj timestamp [ funckja time() ]. Potem w zależności od tego jaką masz długość trwania sesji możesz np. podczas logowania kolejnego użytkownika wykonać:
  1. DELETE FROM `zapisane_sesje` WHERE `timestamp` < '".( time() - 60 * $dlugosc_sesji_w_minutach )."'
Konradek
Cytat(sowiq @ 5.06.2008, 18:06:30 ) *
Po pierwsze nie wiem po co zapisywać sid do bazy danych, skoro równie dobrze możesz zapisywać potrzebne dane w tablicy $_SESSION ?


no właśnie po to, abym mógł pokazać zalogowanych użytkowników smile.gif
Dane usera po zalogowaniu są trzymane w sesji, zapisywanie session id w bazie danych jest tylko po to, aby pokazać kto z uzytkownikow jest aktualnie na stronie.

jeśli jest na to jakiś inny sposób, chętnie wysłucham każdej waszej porady

Pozdrawiam
help_mee
zrób tak...
dopisz mały skrypcik: który będzie sprawdzał, które sesje wygasły (z sql) i usuwał (będzie się działo to w tle gdzi jakiś nowy użytkownik wejdzie na www, najlepiej to zincluduj)

np.
przy logowaniu dodaj do tabeli aktywna_do (datatime)
  1. DELETE FROM zalogowani WHERE aktywna_do < now()

wiesz ocb?
a przy logowaniu ustala zmienną która zostanie wpisana do aktywna_do
now() + ileś minut przez ile ma być ważna sesja (widoczny)

jest 1 minus ... na każdej podstronie musisz dodać linijkę która będzie UPDATować aktywna_do o następne ileś tam minut
erix
Cytat
Tylko, jest problem kiedy dany user nie wylogowuje się (brak kliknięcia wyloguj, gdzie niszcze sesje i nadpisuje w bazie session id na NULL), tylko zamyka przeglądarkę.

session id nie jest usuwane z bazy i na stronie mam zalogowanych użytkowników, których już dawno nie ma

Musisz ustawić czas bezczynności, po którym dany użytkownik zostanie uznany za wylogowanego. No, innej, skuteczniejszej rady nie ma.

Osobiście, korzystam z tabeli typu MEMORY dla sesji (podobnie, jak w punBB) i jako klucz główny właśnie SID (+UNIQUE). Do tego własny handler do sesji, aby każdy session_start" title="Zobacz w manualu PHP" target="_manual wywoływał mi zapytanie do bazy (podobnie, jak u sowiq) INSERT INTO ... ON DUPLICATE KEY UPDATE, które uakutalnia czas w bazie dla danego SID-a.

A wywalanie nieaktywnych przez dłuższy czas? Garbage collector z sesji (patrz: session_set_save_handler" title="Zobacz w manualu PHP" target="_manual).
Konradek
witam i dzięki za pomocne infosy,

Wcześniej zapomniałem dodać, że post @sowiqa pomógł.
Zastosowałem to co napisał, (oczywiście wielkie dzięki @sowiq)

jest to w miarę prosty skrypcik, więc i proste rozwiązania.

Myślałem, że jest na to również jakiś inny jeszcze prostszy sposób (np aby nie zapisywać session id do bazy), stąd też mój drugi post smile.gif


Oczywiście dziekuję również
@erix , @help_mee
Wasze rady przydadzą się na pewno jeszcze kiedyś winksmiley.jpg

Pzdr
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.