Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Gubienie sesji zalogowanego użytkownika
Forum PHP.pl > Forum > Przedszkole
andrzejlechniak
Witam
Mam pewien problem z logowaniem. Samo logowanie działa, tzn. loguje się tak jak chcę, ale zrobiłem link 'odśwież stronę' i strona wraca mi do formularza logowania. Sprawdzałem błędy, ale nie wyskakuje mi tutaj nic. Mam np. link 'moje konto' i to samo. A chciałbym móc klikać na link np. z nagłówka 'Moje konto' bez zbędnego logowania się po raz kolejny. Gubi skrypt sesję, ale nie bardzo wiem dlaczego. Mam session_start() i session_register() i nie wiem gdzie tu jest błąd, może Wy mi pomożecie go znaleźć. Przedstawiam fragment kodu odpowiadający za wyświetlanie zalogowanego użytkownika:

  1. ...
  2. else if (!empty($user_login) && !empty($user_password))
  3. {
  4. $sql = "SELECT * FROM uzytkownicy WHERE user_login='$user_login' AND user_password='$user_password'";
  5. $result = mysql_query($sql);
  6. $count = mysql_num_rows($result);
  7.  
  8. if($count==1)
  9. {
  10. $_SESSION['zalogowany'] = 'tak';
  11. $_SESSION['user_login'] = $user_login;
  12.  
  13. while($row = mysql_fetch_array($result))
  14. {
  15. $_SESSION['user_name'] = $row['user_name'];
  16. $_SESSION['user_role'] = $row['user_role'];
  17.  
  18. if($_SESSION['user_role']==1)
  19. {
  20. require_once('sg_administratora.php');
  21.  
  22. }
  23. else if($_SESSION['user_role']==2)
  24. {
  25. echo 'Jesteś administratorem';
  26. }
  27. }
  28. }
  29. else
  30. {
  31. echo 'Błędny login lub hasło';
  32. echo login_form();
  33. }
  34. }
  35. ...
mat-bi
a nie korzystasz przypadkiem z register_globals (linijka else if (!empty($user_login) && !empty($user_password)))

czy przypisujesz wcześniej?
andrzejlechniak
Hej. Wcześniej mam zmienne przypisanie do formularza:

  1. //Dane z $_POST do wysłania w formularzu
  2. $user_login = $_POST['login'];
  3. $user_password = $_POST['password'];
  4.  
  5. if(empty($user_login) && empty($user_password))
  6. {
  7. echo 'Błąd loginu lub hasła!';
  8. echo login_form();
  9. }


a register_globals w xamppie (bo na nim działam) jest ustawione na OFF
mortus
Wklej kod całego skryptu odpowiedzialnego za logowanie, bo inaczej to tylko gdybać będziemy.
andrzejlechniak
Proszę, kod strony logowania:
  1. <?php
  2.  
  3. function login_form()
  4. {
  5. echo '<form action="uzytkownik.php?id=home" method="Post" >
  6. <fieldset class="przesyl_plikow">
  7. <legend><strong>Logowanie do serwisu</strong></legend>
  8. <div class="login_main">
  9. <div class="log_form">
  10. Login: <input name="login" type="text" id="login">
  11. </div>
  12. <div class="log_form">
  13. Hasło: <input name="password" type="password" id="password">
  14. </div>
  15. <div class="log_form">&nbsp;
  16. <input type="submit" name="submit" value="Zaloguj" title="zaloguj się" />
  17. <input type="reset" name="reset" value="Wyczyść" title="wyczyść pola" />
  18. </div>
  19. </div>
  20. <div class="log_form">
  21. <a href="uzytkownik.php?id=rejestracja_1">Rejestracja</a> |
  22. <a href="uzytkownik.php?id=przypomnij_haslo">Przypomnij hasło</a>
  23. </div>
  24. </fieldset>
  25. </form>';
  26. }
  27.  
  28. if(isset($_GET['wyloguj']))
  29. {
  30. if ($_GET['wyloguj']=='tak')
  31. {
  32.  
  33. $_SESSION['zalogowany']=0;
  34. echo 'Zostałeś pomyślnie wylogowany!';
  35. }
  36. }
  37.  
  38. if(isset($_POST['submit']))
  39. {
  40. //Zmiana wszystkich zmiennych przekazywanych $_POST
  41. foreach ($_POST AS $klucz => $wartosc)
  42. {
  43. $wartosc = trim($wartosc);
  44. $wartosc = mysql_real_escape_string($wartosc);
  45. $wartosc = stripslashes($wartosc);
  46. $wartosc = htmlspecialchars($wartosc, ENT_QUOTES);
  47. $_POST[$klucz] = $wartosc;
  48. }
  49.  
  50. //Dane z $_POST do wysłania w formularzu
  51. $user_login = $_POST['login'];
  52. $user_password = $_POST['password'];
  53.  
  54. if(empty($user_login) && empty($user_password))
  55. {
  56. echo 'Błąd loginu lub hasła!';
  57. echo login_form();
  58. }
  59.  
  60. else if (!empty($user_login) && !empty($user_password))
  61. {
  62. $sql = "SELECT * FROM uzytkownicy WHERE user_login='$user_login' AND user_password='$user_password'";
  63. $result = mysql_query($sql) or die (mysql_error());
  64. $count = mysql_num_rows($result);
  65.  
  66. if($count==1)
  67. {
  68. $_SESSION['zalogowany'] = 'tak';
  69. $_SESSION['user_login'] = $user_login;
  70.  
  71. while($row = mysql_fetch_array($result))
  72. {
  73. $_SESSION['user_name'] = $row['user_name'];
  74. $_SESSION['user_role'] = $row['user_role'];
  75.  
  76. if($_SESSION['user_role']==1)
  77. {
  78. require_once('sg_administratora.php');
  79.  
  80. }
  81. else if($_SESSION['user_role']==2)
  82. {
  83. echo 'Jesteś administratorem. | Twoja nazwa: '.$_SESSION['user_name'].'. Twój login: '.$_SESSION['admin_login'].'
  84. <a href="index.php?id=logowanie&wyloguj=tak">Wyloguj</a>';
  85. }
  86.  
  87. }
  88. }
  89. else
  90. {
  91. echo 'Błędny login lub hasło';
  92. echo login_form();
  93. }
  94. }
  95. else
  96. {
  97. echo 'Błąd logowania';
  98. echo login_form();
  99. }
  100. }
  101. else
  102. {
  103. 'Błąd logowania';
  104. echo login_form();
  105. }
  106.  
  107. ?>
mortus
Gdzie tu jest to owe session_start()? Ta funkcja musi pojawić się w każdym pliku z rozszerzeniem .php, który stanowi odrębną stronę. No chyba, że ten plik wstawiasz do innego pliku (np. za pomocą include()), w którym już session_start() użyłeś.

EDIT
Poza tym nigdzie tutaj nie sprawdzasz, czy użytkownik jest zalogowany. Sprawdzasz jedynie, czy formularz został wysłany, a jeśli nie, to wyświetlasz formularz logowania.
andrzejlechniak
no dobra, dodałem funkcję, ale:
- strona jest dołączana jako require_once
więc nawet jak dodam na każdej stronie to nic nie zmienia
mortus
Cytat(mortus @ 13.07.2011, 15:07:37 ) *
EDIT
Poza tym nigdzie tutaj nie sprawdzasz, czy użytkownik jest zalogowany. Sprawdzasz jedynie, czy formularz został wysłany, a jeśli nie, to wyświetlasz formularz logowania.

andrzejlechniak
teraz dodałem warunek
  1. if($_SESSION['zalogowany'] == 'tak') {...}

i tam dałem wyświetlanie zalogowanych użytkowników, ale i to nic mi nie zmieniło. Teraz tu już zupełnie nie wiem o co chodzi
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.