Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z sesją zalogowanego, nie działa na podstronach
Forum PHP.pl > Forum > Przedszkole
MazurPLNY
Witam,
Adres strony: klik
Użytkownik testowy:
Login: test
Hasło: test
mam taki problem:
Gdy zaloguję się na jakiejkolwiek podstronie i przejdę na stronę główną to wszystko jest ok, ale kiedy wejdę na inną np. /serwery.php To bierze mnie za niezalogowanego. Panel logowania zrobiłem w panelu bocznym.

include/logowanie.php
  1. <?php
  2. /**
  3.  * SKRYPT LOGOWANIA
  4.  */
  5.  
  6. // Zabezpiecz zmienne odebrane z formularza, przed atakami SQL Injection
  7. $login = htmlspecialchars(mysql_real_escape_string($_POST['login']));
  8. $pass = mysql_real_escape_string($_POST['pass']);
  9.  
  10. if ($_POST['send'] == 1) {
  11. // Sprawdź, czy wszystkie pola zostały uzupełnione
  12. if (!$login or empty($login)) {
  13. die ('<p class="error">Wypełnij pole z loginem!</p>');
  14. }
  15.  
  16. if (!$pass or empty($pass)) {
  17. die ('<p class="error">Wypełnij pole z hasłem!</p>');
  18. }
  19.  
  20. $pass = user::passSalter($pass); // Posól i zahashuj hasło
  21.  
  22. // Sprawdź, czy użytkownik o podanym loginie i haśle isnieje w bazie danych
  23. $userExists = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM users WHERE login = '$login' AND pass = '$pass'"));
  24.  
  25. if ($userExists[0] == 0) {
  26. // Użytkownik nie istnieje w bazie
  27. echo '<p class="error">Użytkownik o podanym loginie i haśle nie istnieje.</p>';
  28. }
  29.  
  30. else {
  31. // Użytkownik istnieje
  32. $user = user::getData($login, $pass); // Pobierz dane użytknika do tablicy i zapisz ją do zmiennej $user
  33.  
  34. // Przypisz pobrane dane do sesji
  35. $_SESSION['login'] = $login;
  36. $_SESSION['pass'] = $pass;
  37.  
  38. echo '<p class="success">Zostałeś zalogowany. Możesz przejść na <a href="index.php">stronę główną</a></p>';
  39. }
  40. }
  41. ?>
  42. <form method="post" action="">
  43. <input type="text" name="login" maxlength="32" id="login" value="Login" />
  44.  
  45. <input type="password" name="pass" maxlength="32" id="pass" value="Hasło" /><br />
  46.  
  47. <input type="hidden" name="send" value="1" />
  48. <input type="submit" value="Zaloguj" class="btn" />
  49. </form>

user.class.php
  1. <?php
  2. /**
  3.  * Klasa wykonująca wszystkie podstawowe operacje
  4.  * @author Sobak
  5.  * @package User System
  6.  */
  7.  
  8. class user {
  9.  
  10. public static $user = array();
  11.  
  12. /**
  13.   * Zwraca tablicę ze wszystkimi danymi o użytkowniku.
  14.   * Indeksy tablicy odpowiadają nazwom pól w bazie danych (login, pass etc...)
  15.   * @param string $login
  16.   * @param string $pass
  17.   * @return array
  18.   */
  19. public function getData ($login, $pass) {
  20. if ($login == '') $login = $_SESSION['login'];
  21. if ($pass == '') $pass = $_SESSION['pass'];
  22.  
  23. self::$user = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE login='$login' AND pass='$pass' LIMIT 1;"));
  24. return self::$user;
  25. }
  26.  
  27.  
  28. /**
  29.   * Zwraca tablicę ze wszystkimi danymi o użytkowniku, tak jak powyższa metoda klasy,
  30.   * ale rozpoznaje użytkownika nie po podaniu loginu i hasła tylko po podaniu ID.
  31.   * Używana np. do wyświetlania strony profilu.
  32.   * @param int $id
  33.   * @return array
  34.   */
  35. public function getDataById ($id) {
  36. $user = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE id='$id' LIMIT 1;"));
  37. return $user;
  38. }
  39.  
  40. /**
  41.   * Jeśli użytkownik jest zalogowany - zwraca true, w przeciwnym wypadku - false
  42.   * @return bool
  43.   */
  44. public function isLogged () {
  45. if (empty($_SESSION['login']) || empty($_SESSION['pass'])) {
  46. return false;
  47. }
  48.  
  49. else {
  50. return true;
  51. }
  52. }
  53.  
  54. /**
  55.   * "Soli" hasło przed jego zahashowaniem funkcją md5()
  56.   * @param string $pass
  57.   * @return string
  58.   */
  59. public function passSalter ($pass) {
  60. $pass = '$@@#$#@$'.$pass.'q2#$3$%##@';
  61. return md5($pass);
  62. }
  63.  
  64. }
  65. ?>

Panel boczny (include/boczny.php)
  1. <?php
  2. require_once "include/user.class.php";
  3. ?>
  4. <div id="boczny">
  5. <div class="boczlog">
  6. <?php
  7. if (user::isLogged()) {
  8. // Widok dla użytkownika zalogowanego
  9.  
  10. // Pobierz dane o użytkowniku i zapisz je do zmiennej $user
  11. $user = user::getData('', '');
  12. echo '<p>Login: <b>'.$user['login'].'</b><br><a href="logout.php">Wyloguj</a></p>';
  13. echo '<hr></hr><h4>Serwery</h4>';
  14. echo '<p><a href="mysieci.php">Moje sieci</a><br><a href="myserwery.php">Moje serwery</a><br><a href="reklama.php">Reklama</a></p>';
  15. }
  16.  
  17. else {
  18. // Widok dla użytkownika niezalogowanego
  19. # logowanie
  20. require_once "include/logowanie.php";
  21. echo '<p><a href="register.php">Rejestracja</a></p>';
  22. }
  23.  
  24. ?>
  25. </div>
  26. </div>


Jeżeli o czymś zapomiałem, to proszę napisać
Proszę o pomoc
ZaXaZ
O session_start(); ?
Wazniak96
Cytat(ZaXaZ @ 7.09.2014, 23:59:54 ) *

Pytasz czy odpowiadasz?
Tak. Chodzi tu o session_start
adam882
Na samej górze daj session_start(); pod <?php tam gdzie ma być obsugiwana sesja
ZaXaZ
Cytat(Wazniak96 @ 8.09.2014, 08:31:48 ) *
Pytasz czy odpowiadasz?
Tak. Chodzi tu o session_start

No fakt, dziwnie zabrzmiało, następnym razem dam bez "?"
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.