Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> md5 i sesja
mitp
post
Post #1





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 29.12.2004

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


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. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
My4tic
post
Post #2





Grupa: Zarejestrowani
Postów: 260
Pomógł: 0
Dołączył: 4.08.2005

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


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.
Go to the top of the page
+Quote Post
mitp
post
Post #3





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 29.12.2004

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


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?

Ten post edytował mitp 11.09.2006, 22:20:48
Go to the top of the page
+Quote Post
My4tic
post
Post #4





Grupa: Zarejestrowani
Postów: 260
Pomógł: 0
Dołączył: 4.08.2005

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


Ź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ć.

Ten post edytował My4tic 11.09.2006, 22:37:04
Go to the top of the page
+Quote Post
mitp
post
Post #5





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 29.12.2004

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


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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
My4tic
post
Post #6





Grupa: Zarejestrowani
Postów: 260
Pomógł: 0
Dołączył: 4.08.2005

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


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


Ten post edytował My4tic 12.09.2006, 15:39:24
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: 23.08.2025 - 06:58