Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Logowanie, wylogowywanie, trzymanie sesji
matiit
post 11.01.2010, 18:11:20
Post #1





Grupa: Zarejestrowani
Postów: 365
Pomógł: 70
Dołączył: 5.04.2009

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


W celach naukowych piszę sobie CMS'a.
Mam tam między innymi panel admina. Logowanie przebiega tak:
Na początku każdej strony jest session_start();
Logowanie: plik login.php dostaje od formularza postem login i haslo, login i hash hasła są sprawdzane w bazie danych, jeśli wszystko się zgadza tworzę $_SESSION['logged'] = 'yes';
I strona może wyświetlać 2 widoki - dla użytkownika zalogowanego i dla użytkownika niezalogowanego. Warunek zalogowania? Czy istnieje zmienna $_SESSION['logged'] i czy jest ustawiona na yes. Jeśli tak wyswietla się content dla zalogowanych, jeśli nie - wyświetla się content dla niezalgowanych, np. loginform.
Wylogowanie:
W skrócie:
  1. unset($_SESSION['logged']);

I pojawiają się 2 pytania... Czy jest to bezpieczne? Czy ktoś nie może sobie utworzyć zmiennej sesyjnej takiej jak podana i sie po prostu wbić?
Gdzie przechowywać takie dane jak id zalogowanego usera? Przydatne przy np. zmianie hasła.

Ten post edytował matiit 11.01.2010, 22:34:37
Go to the top of the page
+Quote Post
Kshyhoo
post 11.01.2010, 18:35:35
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




  1.  
  2. if (isset($_SESSION['agent'])) {
  3. if ($_SESSION['agent'] <> $_SERVER['HTTP_USER_AGENT']) {
  4.  
  5. // tutaj wylogowanie, nastąpiła zmiana nagłówka
  6. // i ewentualne przekierowanie do strony z logowaniem
  7.  
  8.  
  9. }
  10. } else {
  11. $_SESSION['agent'] = $_SERVER['HTTP_USER_AGENT'];
  12. }
  13.  
  14. // dalsza zawartość strony

W zmiennej sesyjnej $_SESSION['agent'] zapisujesz nazwę przeglądarki użytkownika, której użytkownik zwykle nie zmienia w czasie trwania sesji. Natomiast bardzo prawdopodobne jest, że osoba atakująca (przechwytująca sesję) będzie miała inny nagłówek HTTP_USER_AGENT.


--------------------
Go to the top of the page
+Quote Post
matiit
post 11.01.2010, 19:42:08
Post #3





Grupa: Zarejestrowani
Postów: 365
Pomógł: 70
Dołączył: 5.04.2009

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


Hm, ok, to jest chyba dobry pomysł (na pewno można jeszcze wiele rzeczy (; )
Jeszcze jedno... Można tworzyć client-side te zmienne sesyjne?
I czemu jak stosuję rozwiązanie to pierwsze swoje to dopóki się nie wyloguje jestem zalogowany? nawet jak zamknę i włącze ponownie przeglądarkę?
Go to the top of the page
+Quote Post
Kshyhoo
post 11.01.2010, 20:21:09
Post #4





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




  1. if ($_SESSION["czas"] and $_SESSION["czas"]+60*30<time()) { // 30 minut i następuje wylogowanie
  2. echo "Sesja wygasła - nastąpiło automatyczne wylogowanie...";
  3. }
  4. $_SESSION["czas"] = time();

Automatyczne wylogowanie po 30 minutach


--------------------
Go to the top of the page
+Quote Post
Spirit86
post 11.01.2010, 20:26:03
Post #5





Grupa: Zarejestrowani
Postów: 607
Pomógł: 23
Dołączył: 8.09.2004
Skąd: Wrocław

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


może lepiej załóż 2 zmienne:
  1. $_SESSION["username"]
  2. $_SESSION["md5password"]
i je przyrównuj, możesz rozpoznawać użytkowników, jak ktoś zmieni hasło, to od razu go wyloguje etc...

Ten post edytował Spirit86 11.01.2010, 20:26:28


--------------------
Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ.
Go to the top of the page
+Quote Post
matiit
post 11.01.2010, 20:33:57
Post #6





Grupa: Zarejestrowani
Postów: 365
Pomógł: 70
Dołączył: 5.04.2009

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


Ok dzięki... poprzerabiałem już klasę autoryzacji... dodałem jeszcze przy sprawdzaniu w bazie danych żeby zwracało id usera i zapisywało w $_SESSION['user_id']

Edit, chociaż jeszcze "Można tworzyć client-side te zmienne sesyjne?"

Ten post edytował matiit 11.01.2010, 22:34:15
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 8.06.2025 - 09:55