Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: (nie)śmiertelne sesje
Forum PHP.pl > Forum > PHP
dragossani
Mam przeczucie, że zostanę zlinczowany za tego post'a bo temat SESJE został już na forum przewałkowany wiele razy ale sytuacja zmusza mnie do podniesienia go ponownie. :?

Jest tak: albo ja nie umiem czytać manuala, albo pies jest pogrzebany gdzie indziej. angrysmiley.gif

To jest kod otwierający sesję po podaniu prawidłowego hasła i loginu:
Kod
session_name("SID");

session_start();

$sid=session_id();

$query ="INSERT INTO rejestr_logowan (session_key, active_session, login, ip, czas_zalog, ) VALUES ('$sid','1','$login',$REMOTE_ADDR',now())";

$result = mysql_query($add) or die("nie został wygenerowany nowy unikatowy numer sesji więc baza staje okoniem");

Zapytanko do MySQL ma mi dodać rekord do bazy przy każdym logowaniu. Dodam, że pole session_key w tabeli rejestr_logowan jest indeksowane jako unique więc nie ma mowy o dopisaniu rekordu jeśli identyfikator sesji nie jest nowy.

A traz mamy kod zamykający sesję przy wylogowywaniu:
Kod
session_name("SID");

session_start();

$sid=session_id();

$query="UPDATE rejestr_logowan SET active_session='0',czas_wylog=now() WHERE session_key='$sid'";

$result=mysql_query ($query) or die (mysql_error());

session_destroy();

setcookie("SID");

Rozumiem, że ta ostatnia linijka jest konieczna gdyż jak mówi manual ciacho nie jest usuwane po wydaniu komendy session_destroy();, a mi zależy na definitywnym, natychmiastowym usunięciu sesji nawet bez zamykania okna przeglądarki.

I teraz powstaje problem: to po prostu nie działa. sad.gif Sesja się tworzy, ale jak się chce ją potem zamknąć to chyba niezbyt się udaje bo przy ponownym logowaniu MySql się burzy - bo nie dostaje unikatowego identyfikatora sesji. Nie pomaga zamknięcie okna przeglądarki. A co najciekawsze (tu już jestem w ciężkim szoku) nie pomaga nawet ręczne wykasowanie na serwerze pliku w którym przechowywane są dane sesji. :!: (Mandrake 8.2 i php 4.1.2) Pomaga dopiero przestartowanie komputera użytkownika.
Nie będę nawet wspominał, że sesja nie znika gdy użytkownik zamknie okno przeglądarki bez wylogowania - to oczywiste. Nie wspomnę, że zamknięcie okienka potomnego przeglądarki wywołanego za pomocą JavaScript nie usuwa ciacha z pamięci bo jest otwarte okno pierwotne - IE ma gdzieś to, że cookie powstało w oknie potomnym i jak się je zamyka to cookie powinno zniknąć (z tego co wiem to błąd IE). To wszystko jeszcze bym jakoś zdzierżył. Ale dlaczego nie daje się najnormalniej w świecie zniszczyć sesji - tego nie wiem.

Za wszelkie uwagi i wyrozumiałość z góry dziękuję.

A tak BTW - jest na forum mój post pod tytułem bodajże SSL, PDFLib a sprawa POST-a albo coś w ten deseń i na rozwiązanie problemu który jest w nim postawiony jakoś od dłuższego czasu nie ma odważnych... :wink:
dragossani
Sorki. Z niewiadomych przyczyn, po dwóch dniach walki, ni z tego ni z owego sesja zaczęła się prawidłowo usuwać. :oops:

Ale pozostaje aktualny problem o którym wspomniałem w wyżej. Cookie sesyjne nie usuwa się z pamięci przeglądarki (IE6) jeśli sesja została zainicjowana w nowym, wywołanym JavaScriptem okienku. Zamknięcie go nic nie daje. Dopiero zamknięcie głównego okna usuwa cookie. Ma ktoś jakąś metodę na to :?:
castor
biggrin.gif dwa dni waklczyles a drugi post wyslales 26min po pierwszym laugh.gif
dobry jestes :wink:

wrocmy do pytania:
nie rozwiazesz tego problemu bo IE klonuje sesjie jesli nowe okno zostalo utworzone przez jakies okno..czyli JS lub poprostu Ctrl+N ..
tylko zamniecie okna matki zniszczy sesjie tak juz jest w IE i nic na to nie poradzisz lecz jesli sie nad tym zastanowisz to nawet jest logiczne ze tak funkcionuje :wink:

a i daj linki do tych nierozwiazanych postow :wink:
dragossani
Cytat
biggrin.gif dwa dni waklczyles a drugi post wyslales 26min po pierwszym laugh.gif  
dobry jestes  :wink:


Dwa dni walczyłem aż w końcu wysłałem pierwszego post'a. Potem zadziałało i wysłałem drugiego. Zwykle nie wypisuje nic na forum zanim sam z tym trochę nie powalcze. :wink:

Cytat
a i daj linki do tych nierozwiazanych postow :wink:

Proszę bardzo: http://forum.php.pl/viewtopic.php?t=433

Nie wiem czy jest to takie logiczne, że dane z jednego okna same przenoszą się do innego. :? Według mnie tam gdzie wywołujesz sesję tam też powinieneś móc ją zamknąć. Mogli co najwyżej dodać komendę choćby JavaScript'ową która przenosi ciastko sesyjne do okna macierzystego. Takie rozwiązanie jak bierzące jest mało elastyczne. A jeśli ktoś chce wyrzucić 2 okna i w każdym z nich inną sesję - a potem pozamykać te sesje (i okna) i wrócić do głównego? Nie do zrobienia. Wiem, że może to zbyt wielkie wymagania, ale nie mogę się doczekać czasów gdy przeglądarka będzie tak elastyczna jak środowisko systemu operacyjnego. Ale dzięki za info.
castor
twoje wymaganie nie sa wysokie..
..a jesli chcesz cos takiego osiagnac to nie przez sesie ktore oferuje ci php tylko sam se napisz :wink:

i w kazdym oknie nowe ciacho :wink:
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.