Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przekazywanie w sesji
Forum PHP.pl > Forum > PHP
suricat
Witam, przeszukałem forum ale nie znalazłem odpowiedzi.

Mam problem z przekazywaniem zmiennych za pomocą sesji.
Problem dotyczy systemu logowania.

index.php
  1. <?
  2. $nonauth = "";
  3. if (($auth = $_GET['auth']) == 'none') $nonauth = "podałeś błędny login lub hasło";
  4. if (($auth = $_GET['auth']) == 'empty') $nonauth = "podaj login i hasło";
  5. ?>
  6. .
  7. .
  8. <body>
  9. .
  10. .
  11. <? echo "<p style=color:red;><b>".$nonauth."</b></p>" ?></p>
  12.  
  13. <form method="post" action="doit.php">
  14. <p>login:
  15. <input type="text" name="user" />
  16. <p>haslo:
  17. <input type="password" name="pass" /></p>
  18. <p><input type="submit" name="submit" value="zaloguj" /></p>
  19. </form>
  20. </body>


doit.php
  1. <?
  2. $_SESSION['username'] = $_POST['user'];
  3. $_SESSION['pass'] = $_POST['pass'];
  4. $_SESSION['authuser'] = 0;
  5.  
  6. if ($_SESSION['username'] == NULL or $_SESSION['pass'] == NULL) {
  7. header('Location: <a href="http://www.strona.pl/cms/index.php?auth=empty');" target="_blank">http://www.strona.pl/cms/index.php?auth=empty');</a>
  8. exit;
  9. }
  10. //sprawdza czy podany login pasuje do hasla z bazy
  11. $user = $_SESSION['username'];
  12. include ('conn.php');
  13. $zapytanie = "SELECT pass FROM osoby WHERE login ='".$user."'";
  14. $odp = mysql_query($zapytanie);
  15.  
  16. while ($row = mysql_fetch_row($odp)) {
  17. $pass_db = $row[0];
  18. }
  19.  
  20.  
  21. //sprawdzenie hasla
  22. if($pass_db == $_SESSION['pass']) {
  23. $_SESSION['authuser'] = 1;
  24. header('Location: <a href="http://www.strona.pl/cms/cms.php');" target="_blank">http://www.strona.pl/cms/cms.php');</a>
  25. }else
  26. {
  27. header('Location: <a href="http://www.strona.pl/cms/index.php?auth=none');" target="_blank">http://www.strona.pl/cms/index.php?auth=none');</a>
  28. exit();
  29. }
  30. ?>


cms.php
  1. <?
  2. ?>
  3. .
  4. .
  5. <body>
  6. .
  7. .
  8. <? echo "zalogowany jako: ".$_SESSION['username']; ?>
  9. .
  10. .
  11. </body>



Problem:
Po poprawnym zalogowaniu (hasło sprawdzone w bazie, więc $_session['username'] musi być ustawione) przy próbie wyświetlenia wartości w cms.php z okazuje się, że session['username'] ma wartość NULL.
Wystarczy jednak, że źle podam hasło lub login i wpiszę prawidłowe wartości wszystko pięknie cieka.

Pytanie:
Jak to jest możliwe?questionmark.gif
Gdzie mój błąd??

Proszę o pomoc
{VeTeR}
nie wiem czy to ma znaczenie co do dzialania skryptu, ale moim zdaniem powinno byc

Kod
$zapytanie = "SELECT pass FROM osoby WHERE login ='$user' ";
suricat
Próbowałem właśnie w ten sposób, ale nie działało - jako login szukało "$user"a nie wartości przechowywanej w zmiennej $user
b_chmura
  1. <?php
  2. if ($_SESSION['username'] == NULL or $_SESSION['pass'] == NULL) {
  3. ?>

zmień na:
  1. <?php
  2. if (empty($_SESSION['username']) OR empty($_SESSION['pass']))
  3. {
  4. ?>


poprawność hasła powinieneś sprawdzać w pętli

  1. <?php
  2. while ($row = mysql_fetch_row($odp)) 
  3. {
  4.  if($row[0] == $_SESSION['pass']) 
  5. {
  6. $_SESSION['authuser'] = 1;
  7. {
  8. }
  9.  
  10. if($_SESSION['authuser'] == 1)
  11. {
  12. header('Location: ht tp:// ww w. strona.pl/cms/cms.php');
  13. }
  14. else
  15. {
  16. header('Location: ht tp://w w w.strona.pl/cms/index.php?auth=none');
  17. }
  18. ?>



P.S:

Header daj sobie normalnie tak jak masz u siebie.
BBCode robi jakieś cyrki
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.