Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Jak to jest z tymi sesjami w PHP?
jacquar
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 17.11.2009

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


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?
Go to the top of the page
+Quote Post
ignas1987
post
Post #2





Grupa: Zarejestrowani
Postów: 78
Pomógł: 3
Dołączył: 10.11.2008
Skąd: Radom

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


Najlepiej zastosować coś takiego, że przy wyjściu ze strony:

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


Ten post edytował ignas1987 25.11.2009, 11:50:10
Go to the top of the page
+Quote Post
darko
post
Post #3





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Cytat
Najlepiej zastosować coś takiego, że przy wyjściu ze strony:

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


start_session(); (IMG:style_emoticons/default/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.

Ten post edytował darko 25.11.2009, 12:42:42
Go to the top of the page
+Quote Post
ignas1987
post
Post #4





Grupa: Zarejestrowani
Postów: 78
Pomógł: 3
Dołączył: 10.11.2008
Skąd: Radom

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


jest coś takiego jak wykonanie skryptu przed wyjściem ze strony. Od czego masz javascript (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
darko
post
Post #5





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Spokojnie (IMG:style_emoticons/default/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...
Go to the top of the page
+Quote Post
ignas1987
post
Post #6





Grupa: Zarejestrowani
Postów: 78
Pomógł: 3
Dołączył: 10.11.2008
Skąd: Radom

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


W sumie to z tym js masz racje (IMG:style_emoticons/default/biggrin.gif) (IMG:style_emoticons/default/biggrin.gif) (IMG:style_emoticons/default/biggrin.gif) hehe (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
darko
post
Post #7





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


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).

Ten post edytował darko 25.11.2009, 13:08:57
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: 5.10.2025 - 22:38