Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: md5 i sesja
Forum PHP.pl > Forum > Przedszkole
mitp
Witam.

Moje pytanie jest następujące: Hasła w bazie są kodowane. Przy logowaniu zakodowane hasła porownuje za pomocą:

  1. <?php
  2. $password = md5($password);
  3. $zapytanie = "SELECT * FROM cos WHERE
  4.  user = '$user' and
  5.  password = '$password' ";
  6. ?>


czyli bez "$password = md5($password);" nie szło bo widział inne hasła a nie zakodowane ...

teraz pytanie - jezeli pare linijek niżej tworzę sesję to ...

1) sesja utworzy mi się z zakodowanym hasłem?

  1. <?php
  2. session_register("password");
  3. ?>
My4tic
1. Używaj $_GET/$_POST/$_SESSION itd.
2. Nie:

  1. <?php
  2. $password = md5($password);
  3. ?>


Operator porównania to '==' a nie '=' więc:

  1. <?php
  2. $password == md5($password);
  3. ?>


3. Nie używaj session_register();
4. Po co w ogole trzymać w sesji hasło? Zakodowane czy nie? Podczas logowania sprawdzasz czy user podał dobry login i hasło - jeśli tak to do sesji zapisz sobie np.:

  1. <?php
  2. $_SESSION['bUserStatus'] = TRUE;
  3. ?>


...i po tym rozpoznajesz czy user jest zalogowany czy nie.
mitp
Ok. to moze poprosze o pomoc jak miało by to wyglądać poprawnie. Ja mam tak:

formularza nie bede przedstawial. skrypt autoryzacja.php

  1. <?php
  2.  
  3. $user = $_POST['user'];
  4. $password = $_POST['password'];
  5.  
  6. if (($user=='') AND ($password=='')) {
  7. header("Location: blad1.php");
  8. } else {
  9. // połącz sie z MySQL
  10. $conn = mysql_connect( "localhost", "...", "..." );
  11. if(!$conn) {
  12. echo 'Brak połączenia z bazą danych.';
  13. }
  14. // wybierz właściwą bazę danych
  15. $db = mysql_select_db('aaa');
  16. if(!$db) {
  17. echo 'Błąd wyboru bazy danych.';
  18. }
  19. // znajdź pasujący wiersz
  20. $password == md5($password);
  21. $zapytanie = "SELECT * FROM bbb WHERE
  22.  user = '$user' and
  23.  password = '$password' ";
  24. $wynik = mysql_query( $zapytanie );
  25. if(!$wynik) {
  26. echo 'Nie można wykonać zapytania.';
  27. }
  28.  
  29. $wiersz = mysql_fetch_row( $wynik );
  30. $ile = $wiersz[0];
  31. if ( $ile > 0 ) {
  32.  
  33.  
  34. header("Location: cos/index.php");
  35. } else {
  36. header("Location: blad2.php");
  37. }
  38. }
  39.  
  40. ?>


pozniej na kazdej podstwonie zaczyna mi sie w ten sposob:

  1. <?php
  2.  
  3.  if (!isset($user)) {
  4.  header("Location: blad_autoryzacji.php");
  5.  } else {
  6.  
  7. echo'tresc strony';
  8. }
  9.  
  10. ?>


Jeśli chodzi o tabele mam w niej pola:
- id
- user
- password
- status
( status moze przyjac wartość 0 "standardowo dla normalnych uzytkownikow" i 1 dla "administratora" )

I tu mam pytanie. Jak rozpoznać, jakie wykonać zapytanie ażeby sprawdzić jaki status ma dany użytkownik.
Chodzi mi o to że np. jak mam strone index.php ( to tu mogą wchodzić wszyscy ( uzytkownicy którzy mają status 0), ale po wejściu np. do strony tajna.php chcę sprawdzić który użytkownik ma status 1, a który 0 w bazie.
Ten co ma status 1 będzie mógł zobaczyć zawartość strony, a ten co ma 0 pojawi mu sie komunikat iż nie ma uprawnień do przeglądania tej strony.

Tylko jak to zapisac??

pomozecie?
My4tic
Źle mnie zrozumiałeś w kilku sprawach więc Ci to poprawie.

  1. <?php
  2. $user = strip_tags($_POST['user']);
  3. $password = strip_tags($_POST['password']);
  4.  
  5. if ( empty($user) OR empty($password) ) {
  6. header('Location: blad1.php');
  7. } 
  8.  
  9. else {
  10. $conn = mysql_connect( 'localhost', '...', '...' );
  11. if(!$conn) {
  12.  echo 'Brak połączenia z bazą danych.';
  13.  exit;
  14. }
  15.  
  16. $db = mysql_select_db('aaa');
  17. if(!$db) {
  18.  echo 'Błąd wyboru bazy danych.';
  19.  exit;
  20. }
  21.  
  22. $password = md5($password); 
  23. $zapytanie = 'SELECT * FROM bbb WHERE user = '.$user.' AND password = '.$password;
  24. $wynik = mysql_query( $zapytanie );
  25. if(!$wynik) {
  26. echo 'Nie można wykonać zapytania.';
  27. }
  28.  
  29. $wiersz = mysql_fetch_row( $wynik );
  30. $ile = $wiersz[0];
  31. if ( $ile > 0 ) {
  32.  $_SESSION['bUserStatus'] = TRUE; // zalogowany
  33.  header('Location: cos/index.php'); // tresc dla zalogowanego
  34. } 
  35.  
  36. else {
  37. header('Location: blad2.php');
  38. }
  39. }
  40. ?>



  1. <?php
  2.  if ( $_SESSION['bUserStatus'] == FALSE ) { // nie jest zalogowany
  3. header('Location: blad_autoryzacji.php');
  4.  } 
  5.  else echo'tresc strony';
  6. ?>



Cytat
I tu mam pytanie. Jak rozpoznać, jakie wykonać zapytanie ażeby sprawdzić jaki status ma dany użytkownik.
Chodzi mi o to że np. jak mam strone index.php ( to tu mogą wchodzić wszyscy ( uzytkownicy którzy mają status 0), ale po wejściu np. do strony tajna.php chcę sprawdzić który użytkownik ma status 1, a który 0 w bazie.
Ten co ma status 1 będzie mógł zobaczyć zawartość strony, a ten co ma 0 pojawi mu sie komunikat iż nie ma uprawnień do przeglądania tej strony.

Tylko jak to zapisac??


W SQL nie trzymasz zadnego statusu usera. Do tego masz sesje. Skrypt powinien działać.
mitp
Witam. Dzieki śliczne za poprawe powyzszej czesci. Wszystko działa jak należy. Tylko co do tego statusu troszku się nie zrozumieliśmy. Nie chciałem go wykorzystać jako sprawdzenia czy użytkownik podał właściwe hasło czy nie, tylko do sprawdzenia jego "praw".

Chodziło mi o to, że (opisze to moze):

uzytkownik sie loguje, po praw. podaniu log. i hasla zostaje zalogowany i przekieowany do właściwej strony. Powiedzmy ze mamy strony index.php, aktualnosci.php i tajna.php. Status uzytkownika chciałem wykorzystać, azeby ograniczyć, rozdzielić "prawa" userów. Status 0 - oznacza inaczej zwykłego uzytkownika, bez praw np. modyfikacji newsów i tym samym uzytkownik posiadajacy status 0 nie będzie mógł wejść na stronę tajna.php mimo iż jest zalogowany w serwisie. Natomiast uzytkownik ze statusem 1 (czyli inaczej patrzac na to kontem administratora ) bedzie mógł poruszać się po wszystkich podstronach, tym sammym bedzie mógł wejsc do strony.tajna.php i modyfikowac newsy. Do tego chcialem wykozrystać dodatkowy rekord w tabeli, azeby nie robic dodatkowo panelu administratora ...

moze teraz wyjasniłem jasniej o co mi chodzilo ... tylko nei wiem jak to przelac na php winksmiley.jpg
My4tic
To dodaj sobie jeszcze jedną zmienną do sesji i po problemie.

  1. <?php
  2. .
  3. . // poprawne logowanie
  4. .
  5.  
  6. $_SESSION['bUserStatus'] = TRUE;
  7. if ( $UserID == 1 ) $_SESSION['iAccessLevel'] = 0; // admin - pierwszy user z bazy SQL, czy jakoś inaczej, zależy jak to robisz
  8. else $_SESSION['iAccessLevel'] = 1; // zwykły user
  9. .
  10. .
  11. .
  12. ?>
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.