Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Jak to jest z tymi sesjami w PHP?
Forum PHP.pl > Forum > Przedszkole
jacquar
Napisałem system autoryzacji, który wykorzystuję na kilku swoich serwisach www. W systemie tym w zmiennych sesji umieszczam (po uprzednim sprawdzeniu czy ktoś ma prawo) zmienną user, której przypisany jest login użytkownika. Przy wejściu na zastrzeżoną podstronę sprawdzam czy jest zmienna sesyjna user i jak jest to wpuszczam klienta. Wszystko działa dobrze, ale...

Gdy w przeglądarce otworzę zupełnie inny serwis, rówież korzystający z tego systemu autoryzacji, to zmienna sesyjna user jest TĄ samą zmienną, którą zainicjowałem logując sią do poprzedniego serwisu i użytkownik, który ma prawo korzystać z poprzednuiego serwisu, a nie ma prawa do tego serwisu, spokojnie sobie wchodzi.

Jak to jest z tymi sesjami?
ignas1987
Najlepiej zastosować coś takiego, że przy wyjściu ze strony:

Kod
<?php
start_session();
session_destroy();
?>
darko
Cytat
Najlepiej zastosować coś takiego, że przy wyjściu ze strony:

Kod
<?php
start_session();
session_destroy();
?>


start_session(); questionmark.gif chyba session_start
A co to da, jeśli user się nie wyloguje, tylko zmieni serwis wpisując adres w pasku przeglądarki?

IMHO najlepiej jest zapisywać w sesji w miarę unikatowe a jednocześnie jednoznacznie identyfikujące usera dane. Przykładowo możesz utworzyć hash md5 z następujących pól w tabeli user: id, data_dodania, login i zapisać go w sesji np. jako user_token. Generalnie chodzi o to, żeby te dane były niezmienne (zapisane raz do bazy nie podlegały późniejszej modyfikacji) dla każdego użytkownika i żeby zapisywać też id usera. Później, jak sprawdzasz czy user jest zalogowany, to dla zapisanego w sesji id usera wyciągasz te dane z bazy, które zahashowałeś przed zapisaniem w sesji, analogicznie hashujesz je i porównujesz z hashem w sesji, jeśli się zgadzają, to użytkownik jest autoryzowany, jeśli nie, to redirect.
ignas1987
jest coś takiego jak wykonanie skryptu przed wyjściem ze strony. Od czego masz javascript questionmark.gif a z tym session_start() to po prostu pomyłka, pisze w międzyczasie i siedze w pracy, dlatego może tak automatycznie odpisałem ale niedokładnie.
darko
Spokojnie smile.gif Uważam, że zabezpieczenia i javascript to pomyłka, (js zawsze można wyłączyć, stronę można zapisać na dysku twardym i usunąć kod js itd. itp.) no ale to moje zdanie...
ignas1987
W sumie to z tym js masz racje biggrin.gif biggrin.gif biggrin.gif hehe aaevil.gif a z tym zabezpieczeniem to najlepszy sposób tzw. hash, przechowujący losowy ciąg znaków nadany przy wejściu na stronę, identyfikujący usera
darko
Lepiej: nie losowy, a utworzony - jak wyżej napisałem - na podstawie pewnych stałych danych o userze. Co ciekawe, jest dość niewielkie prawdopodobieństwo wystąpienia kolizji, w powyższym przykładzie będzie mieć miejsce w przypadku, kiedy w dwóch różnych serwisach (z tym samym mechanizmem) będzie dwóch userów o tym samym id, loginie i dacie dodania do bazy. Można to rozwiązać dodając w każdym z tych serwisów inną sól (oczywiście taką samą w obrębie jednego serwisu).
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.