![]() |
![]() |
![]()
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 |
|
|
![]() |
![]()
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ć:
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 5.06.2008 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 ? 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 |
|
|
![]()
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)
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 |
|
|
![]()
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). |
|
|
![]()
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.09.2025 - 19:18 |