Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z sesjami i nieprawidłowym przekierowaniem
Forum PHP.pl > Forum > Przedszkole
ŁUKASZ24
Witam serdecznie! Ostatnio ponownie zacząłem swoją przygodę z php i piszę stronę jako projekt do szkoły. Zawiera ona prosty panel administracyjny którego tworzeniem właśnie się zajmuję.
Mam jednak spory problem z opanowaniem sesji. Z tego co wyczytałem na tym forum w różnych tematach problemem jest zapętlone przekierowanie co uniemożliwia załadowanie strony smile.gif. Podejrzewam, że chodzi o tworzenie sesji za każdym przeładowaniem, co sprawia że strona ciągle się przekierowuje. Przeglądarka więc wypluwa błędy o nieprawidłowym przekierowaniu. Rzecz w tym że wszystkie "podstrony" panelu administracyjnego mam w jednym pliku, można się do nich dostać za pomocą admin.php?page=index, czy admin.php?page=login.
Żeby nie mieszać już całkowicie zamieszczam kod pliku admin.php:

  1. <?php
  2. $admin_username = 'admin';
  3. $admin_pass = sha1('pass');
  4. $admin_id = 1;
  5.  
  6. $page = $_GET['page'];
  7.  
  8. function checkAdmin ($username, $password)
  9. {
  10. global $admin_username;
  11. global $admin_pass;
  12. global $admin_id;
  13.  
  14. if ($username == $admin_username && sha1($password) == $admin_pass)
  15. {
  16. $id = admin_id;
  17. return $id;
  18. }
  19. else
  20. return false;
  21. }
  22.  
  23. function showLoginForm()
  24. {
  25. echo '
  26. <form method="post" action="admin.php?page=login">
  27. Zaloguj sie:
  28. <input type="text" name="user"/>
  29. <input type="password" name="password"/>
  30. <input type="submit" value="OK"/>
  31. </form>';
  32. }
  33.  
  34. // session
  35.  
  36. if (!isset($_SESSION['initiate']))
  37. {
  38. $_SESSION['initiate'] = true;
  39. $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  40. }
  41.  
  42. if($_SESSION['ip'] != $_SERVER['REMOTE_ADDR'])
  43. {
  44. die('Hacking attemp');
  45. }
  46.  
  47. if (!isset($_SESSION['user']))
  48. {
  49. $_SESSION['user'] = 0;
  50. }
  51.  
  52. // check
  53. if ($_SESSION['user'] > 0)
  54. {
  55. header('Location: admin.php?page=index');
  56. exit();
  57. }
  58. else
  59. {
  60. header('Location: admin.php?page=login');
  61. exit();
  62. }
  63.  
  64. if ($page = 'index')
  65. {
  66. echo 'witam';
  67. }
  68. else if ($page = 'login')
  69. {
  70. showLoginForm();
  71. if ($_SERVER['REQUEST_METHOD'] == 'POST')
  72. {
  73. if (($user_id = checkAdmin($_POST['user'], $_POST['password']) ) !== false )
  74. {
  75. $SESSION['user'] = $user_id;
  76. header('Location: admin.php?page=index');
  77. exit();
  78. }
  79. else
  80. {
  81. echo 'Porażka';
  82. showLoginForm();
  83. }
  84. }
  85. else
  86. {
  87. showLoginForm();
  88. }
  89. }
  90. ?>


Jako że piszę system logowania w PHP po raz pierwszy to sporo wspomagałem się tą stroną. Wiem że to co napisałem nie jest doskonałe (tym bardziej że nie działa), i byłbym wdzięczny jeżeli ktoś mógłby wskazać mi błąd jaki popełniam. smile.gif

Z góry dziękuję i serdecznie pozdrawiam smile.gif
Majkelo23
Pokiełbasiłeś trochę. Najlepiej zrób sobie to w połączeniu z bazą danych i dodaj po prostu pole user_level. jeśli user_level = 1 to admin i już wink.gif A do sesji przypisz sobie ID usera. Tu masz to tak rozplanowane: http://michael2318.pl/?p=142
ŁUKASZ24
Udało się! Dzięki temu że obadałem kod który mi podlinkowałeś znalazłem odpowiedni tok działania pod moją stronę smile.gif. Wyłapałem również bardzo istotny błąd:
  1. if ($page = 'index')


Takim operatorem się nie porównuje przecież, jestem gapa biggrin.gif, uniemożliwiało to otwieranie podstron.
Po drugie zastosowanie odpowiednich warunków, co właściwie pojąłem po przejrzeniu skryptu logowania smile.gif
Zamiast:
  1. if ($_SESSION['user'] > 0)
  2. {
  3. header('Location: admin.php?page=index');
  4. exit();
  5. }
  6. else
  7. {
  8. header('Location: admin.php?page=login');
  9. exit();
  10. }


To:
  1. if ($_SESSION['user'] > 0 && $page != 'index')
  2. {
  3. header('Location: admin.php?page=index');
  4. exit();
  5. }


Dzięki za naprowadzenie na właściwą drogę smile.gif! Pomógł w pełni zasłużone.
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.