Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sesje - początki i mały problem
Forum PHP.pl > Forum > PHP
Szymciosek
Witam,
jak w temacie, mam mały problem z działaniem sesji.

index.php
  1. <?php
  2.  
  3. $users = array (1 => array ('login' => 'user1', 'password' => md5('haslo')),
  4. array ('login' => 'user2', 'password' => md5('haselko')),
  5. array ('login' => 'user3', 'password' => md5('pass')) );
  6.  
  7. function czyIstnieje($login, $haslo)
  8. {
  9. global $users;
  10.  
  11. $haslo = md5($haslo);
  12.  
  13. foreach ($users as $id => $dane)
  14. {
  15. if ($dane['login'] == $login && $dane['password'] == $haslo)
  16. {
  17. return $id;
  18. }
  19. }
  20.  
  21. return false;
  22. }
  23.  
  24.  
  25. if (!isset($_SESSION['user']))
  26. {
  27. $_SESSION['user'] = 0;
  28. } else {
  29. if($_SESSION['user'] > 0)
  30. {
  31. // Ktos jest zalogowany
  32. //echo 'Witaj, '.$uzytkownicy[$_SESSION['user']]['login'].' na naszej stronie!';
  33. header("Location: panel.php");
  34. } else {
  35. //Niezalogowany
  36. if ($_SERVER['REQUEST_METHOD'] == 'POST')
  37. {
  38. if (($id = czyIstnieje($_POST['login'], $_POST['haslo'])) !== false)
  39. {
  40. $_SESSION['user'] = $id;
  41. echo 'Dziekujemy, zostales zalogowany ! <a href="panel.php">Dalej</a>';
  42. } else {
  43. echo 'Podales nieprawidlowe dane <a href="session.php">Dalej</a>';
  44. }
  45. } else {
  46. echo '<form method="post" action="session.php">
  47. Zaloguj sie: <input type="text" name="login"/>
  48. <input type="password" name="haslo"/>
  49. <input type="submit" value="OK"/></form>';
  50. }
  51. }
  52. }
  53.  
  54. ?>
  55.  


panel.php
  1. <?php
  2.  
  3. //session_start();
  4.  
  5. echo 'Witaj w panelu<br />
  6. <a href="logout.php">Wyloguj</a>';
  7.  
  8. ?>


logout.php
  1. <?php
  2.  
  3.  
  4.  
  5. header("Location: session.php");
  6.  
  7. ?>


Wiem, że panel to bardzo prosta rzecz tutaj, bo wystarczy wejść na www.xxx.pl/panel.php i już, ale nie o to tutaj chodzi, chociaż możecie napisać o jakichś zabezpieczeniach z miłą chęcią poczytam, ale teraz do tematu:

Wchodzą w index.php widzę początkowo formularz logowania, który sprawdza czy podany user istnieje, jeśli tak i hasło się zgadza, to następuje przekierowanie do panel.php, gdzie mam przycisk WYLOGUJ, w logout.php zrobiłem usunięcie danych sesyjnych i sesji i na koniec przekierowanie z powrotem do index.php (u mnie to jest session.php), no i tu zaczyna się jakiś dziwny problem, sesji nie ma już chyba po session_unset i destroy, ale jeśli nastąpi mi przekierowania widzę tylko pustą stronę, dopiero po jej odświeżeniu wszystko wraca do normy i znowu mogę zobaczyć formularz logowania.

Druga sprawa, już napiszę przy okazji, jak w trakcie logowania zrobić przycisk PAMIĘTAJ MNIE, czytałem o tym i są tam owszem wykorzystane sesje, ale po co ciasteczka ?
prowseed
W Twoim przypadku nie można mówić o zabezpieczeniach : )

Proponowałbym Ci inne, przyjemniejsze rozwiązanie: plik lock.php
  1. <?php
  2. class Secure
  3. {
  4. public static function auth($user, $pass)
  5. {
  6. //sprawdz uzytkownika i jesli taki istnieje ustaw mu $_SESSION['user'] = $user;, wczesniej przefiltruj jeszcze POST'y
  7. }
  8. public static function lock()
  9. {
  10. if(!isset($_SESSION)) session_start(); //jesli nie ma sesji to zacznij
  11. if(isset($_SESSION['user'])) return true; //jesli jest przypisanie, to znaczy, ze wczesniej sie poprawnie zalogowal uzytkownik, konczymy prace
  12. $user = isset($_POST['user']) ? $_POST['user'] : false;
  13. $pass = isset($_POST['pass']) ? $_POST['pass'] : false;
  14.  
  15. if(!$user || !$pass) self::form(); //formularz mial puste pole/pola
  16. if(self::auth($user, $pass))
  17. {
  18. return true; //uzytkownik poprawnie sie zalogowal, konczymy prace skryptu
  19. }
  20. else
  21. self::form('Zły login lub hasło!'); //wywolujemy formularz z bledem
  22. }
  23.  
  24. protected static function form($err = '')
  25. {
  26. exit('
  27. //tu mozesz sobie dopisac html, style itp
  28. <form method="post" class="form">
  29. <input type="text" name="user" />
  30. <input type="password" name="pass" />
  31. ' . $err . '
  32. <input type="submit" value="Zaloguj" />
  33. </form>
  34. ');
  35. }
  36. }


I teraz tylko sprawdzasz w swoim pliku panel.php, czy jest zalogowany uzytkownik i czy przypadkiem nie kliknął logout.

  1. <?php
  2. if(isset($_GET['logout'])){
  3. if(!isset($_SESSION)) session_start();
  4. unset($_SESSION['user']);
  5. }
  6. require 'lock.php'; //zalacz plik
  7. Secure::lock(); //sprawdz, czy zalogowany


To tak najbardziej prymitywnie, Twoje nie działa z takich powodów, o których przeczytasz w googlach : )

Co do ciastek, to poczytaj o różnicach między zwykłymi ciastkami, a sesyjnymi i jak długo żyje (może żyć) każde z nich.

//EDIT
Aha, i jeszcze możesz się zapoznać z tym: http://www.php.net/manual/en/ref.session.php
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.