Notice: query (INSERT INTO lemat_stats_browser (day,browser,ilosc,internal) VALUES ('2024-04-24','Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)',1,'2')) failed at /home/lemat/lemat.priv.pl/stats.php:151: Array ( [0] => 22001 [1] => 1406 [2] => Data too long for column 'browser' at row 1 ) in /home/lemat/lemat.priv.pl/panel_adm/dbclass.inc.php on line 15

Warning: Cannot modify header information - headers already sent by (output started at /home/lemat/lemat.priv.pl/panel_adm/dbclass.inc.php:15) in /home/lemat/lemat.priv.pl/stats.php on line 174
Sesje - Lemat, strona prywatna
Lemat, strona prywatna

Sesje

Co to są sesje? Otóż sesje to taka przechowalnia zmiennych po stronie serwera. Jeżeli musimy trzymać wartość jakiejś zmiennej pomiędzy kolejnymi wywołaniami strony, to w sesjach się to robi najprościej.

Kilka uwag na początek:


Typowym przykładem użycia sesji jest logowanie użytkowników. Przypuśćmy, że mamy bazę zawierającą ID, IMIĘ, NAZWISKO, UPRAWNIENIA, LOGIN, HASLO.

Robimy formularz zawierający pola na login i hasło.
Jeżeli user wyśle coś do tego skryptu to sprawdzamy czy w bazie danych istnieje login i hasło.

Jeżeli istnieje to inicjujemy zmienne sesyjne:
$_SESSION['USER_ID']=id_usera_z_bazy
$_SESSION['UPRAWNIENIA']=uprawnienia_usera_z_bazy

i w każdym skrypcie sprawdzamy czy $_SESSION['USER_ID'] nie jest puste - wiemy wtedy, że user jest zalogowany.
Jeżeli jest puste to oczywiście należy wysłać usera na stronę logowania i przerwać wykonywanie skryptu.

Wylogowanie usera można zrobić przypisując pusty ciąg znaków do $_SESSION['USER_ID'] i/lub niszcząc sesję session_destroy()


Czy sesje są bezpieczne?

Jeżeli przeglądarka nie akceptuje cookiesów, to w pasku adresu pojawia się identyfikator sesji (taki długi, brzydki ciąg znaków). Jeżeli skopiujemy ten pasek adresu to okna przeglądarki na innym komputerze to okazuje się, że jednocześnie będą zalogowane dwie przeglądarki na tą samą sesję.

Pewnym rozwiązaniem tego problemu jest trzymanie adresu IP w sesji i porównywanie go za każdym odwołaniem do skryptu. Niestety nie rozwiązuje to problemu 2 komputerów za tym samym NATem. Ale jest inne rozwiązanie:

W sesji trzymamy pewną wartość, powiedzmy $key. Tą wartość wysyłamy do przeglądarki - może być jako ciacho, może być jako parametr w linku. Przeglądarka przy następnym wejściu odeśle nam ten parametr z powrotem - porównujemy go z tym zapisanym w sesji i generujemy nowy, unikalny $key.

Jeżeli ktoś skopiuje pasek adresu przeglądarki to przy następnym odwołaniu do serwera wartość $key się rozsynchronizuje - tylko jedna z przeglądarek będzie miała dostęp.

W zasadzie po stwierdzeniu faktu rozsynchronizowania się $key-a należałoby sesję zniszczyć - nie będzie wiadomo, która przeglądarka jest właściwa więc należy zabronić dostępu obu.


Data utworzenia : 2003-11-16, data aktualizacji :2010-12-01

Skomentuj ten tekst

Protected by spf
[Nospam-PL.NET]
Seti@Home
www.php.net
© Lemat 2004 - ∞