Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Problem z sesją
Forum PHP.pl > Forum > Przedszkole
StadiPL
Całość działa prawidłowo (chyba). Jak to zrobić prawidłowo? Notice: A session had already been started - ignoring session_start() in D:\_XAMPP\serwer\htdocs\log\login.php on line 1
index.php:
  1. <?php
  2. //jeśli "logged" puste to zmienia na 0
  3. if(empty($_SESSION["logged"]))$_SESSION["logged"]=0;
  4. //sprawdzenie czy zalogowany, jeśli tak to idzie dalej, jak nie to login + link do rejerstracji (register_activ.php > index.php)
  5. if(!$_SESSION["logged"]==1)
  6. {
  7. //logowanie (login_function.php > index.php)
  8. echo "jestes niezalogowany<br />";
  9. include ("login.php");
  10. echo "nie masz konta? rejestracja: <a href='register.php'>KLIK!</a>";
  11. exit();
  12. }
  13. //zalogowany zobaczy reszte tresci, czyli logout
  14. else
  15. echo"<a href='logout.php?logout=y'>wyloguj się</a>";
  16. ?>

login.php:
  1. <?php
  2. //jeśli "logged" puste to zmienia na 0
  3. if(empty($_SESSION["logged"]))$_SESSION["logged"]=0;
  4. //łączenie z bazą danych
  5. $connection = @mysql_connect('127.0.0.1', 'root', '')
  6. or die('Brak połączenia z serwerem MySQL.<br />Błąd: '.mysql_error());
  7. $db = @mysql_select_db('jink', $connection)
  8. or die('Nie mogę połączyć się z bazą danych<br />Błąd: '.mysql_error());
  9. //zmienne
  10. $back="<a href='index.php'> - INDEX</a>";
  11. $nickname=$_POST['nickname'];
  12. $password=$_POST['password'];
  13. //zmienna sprawdzająca egzystencję $nickname w bazie danych
  14. $q = mysql_query("SELECT * FROM users WHERE nickname='$nickname'") or die(mysql_error());
  15. $check=mysql_num_rows($q);
  16. //zmienna zawierająca hasło użytkownika wczytane z bazy na podstawie $nickname
  17. $q_password=@mysql_query("select `password` from `users` where `nickname`='".$nickname."' limit 1");
  18. $result_password=mysql_fetch_assoc($q_password);
  19. $password_check=$result_password['password'];
  20.  
  21. //WARUNKI
  22. //nickname_chcek - sprawdzenie egzystencji
  23. if (!$check>0) { echo 'Zly login'; exit();}
  24. //hasło - porównanie wartości z bazą danych
  25. else if ($password_check != $password) {echo "Podales zle haslo" .$back; exit();}
  26. //logged_check - sprawdzanie czy niezalogowany
  27. else if($_SESSION["logged"]==1){echo "użytkownik już zalogowany" .$back; exit();}
  28.  
  29. //jak ok to loguje
  30. else if ($_SESSION["logged"]=1)
  31. {
  32. $_SESSION['nickname']=$nickname;
  33. //nie trzymac hasla w sesji
  34. $_SESSION['password']=$password;
  35. echo "zalogowano jako " .$_SESSION['nickname'];
  36. echo"<a href='index.php'>INDEX</a>";
  37. }
  38. ?><br />
session
Zacznij od tego, żeby startować sesje nad całością kodu strony:
  1. <?php session_start(); ?>
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5. ...

Nie rozpoczynaj sesji w login.php jeślil includujesz go do plikiu index.php w którym sesja jest już rozpoczęta.
StadiPL
A kończyć na samym dole?
Thorang Hoog
Nie. Sesje kończysz w momencie kiedy na przykład użytkownik się wyloguje.
session
I usuwasz/resetujesz zminne sesyjnych: unset($_SESSION['']); przy wylogowaniu.
StadiPL
Czyli jak ma wyglądać mój plik logout?
  1. <?php
  2. if($_GET["logout"]=="y"){$_SESSION["logged"]=0;echo "Zostałeś wylogowany z serwisu"; session_destroy(); echo '<a href="index.php">INDEX</a>';}
  3. ?>
session
Prawdopodobnie ten plik też includujesz, więc nie rozpoczynaj sesji, dodaj:
  1. unset($_SESSION["logged"]);

Przed session_destroy();
Thorang Hoog
W miejscu gdzie masz session_destroy();

wpisz dla bezpieczeństwa:

  1. $_SESSION=array(); // Czyści zmienne sesyjne
  2. session_write_close(); // zapisuje dane sesyjne na serwerze- w tym przypadku pusty plik
  3. session_regenerate_id(true); // nadanie nowego numeru identyfikacyjnego użytkownikowi


Bez nadpisania danych sesji na pusty plik dane sesyjne użytkownika wciąż znajdowały by się na dysku serwera i ktoś mógł by się do nich dostać.
Domyślnie te pliki są zapisywane w tempie czyli każdy ma do niego dostęp jeśli serwer jest współdzielony
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.