Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Wygasniecie session_id
Konradek
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 5.06.2008

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


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Proszę o podanie jakiegoś sposobu na ten fenomen (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Z góry dziękuję

Konradek
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
sowiq
post
Post #2





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


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 )."'
Go to the top of the page
+Quote Post
Konradek
post
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 5.06.2008

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


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 (IMG:http://forum.php.pl/style_emoticons/default/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
Go to the top of the page
+Quote Post
help_mee
post
Post #4





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

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


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

Ten post edytował help_mee 6.06.2008, 22:02:47
Go to the top of the page
+Quote Post
erix
post
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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).
Go to the top of the page
+Quote Post
Konradek
post
Post #6





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 5.06.2008

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


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)


Oczywiście dziekuję również
@erix , @help_mee
Wasze rady przydadzą się na pewno jeszcze kiedyś (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Pzdr
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 14.09.2025 - 19:18