Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php+session] Logowanie
Forum PHP.pl > Forum > PHP
Dziadzia
Witam.

Napisałem w proste logowanie, które nie działa biggrin.gif Logować loguje się, lecz po przeładowaniu strony... tzn kliknę przycisk zaloguj ale mnie nie zaloguje, dopiero muszę dać np: zakładkę home i wtedy pojawi się, że jestem zalogowany. A wyloguj już całkowicie nie działa...
To jest plik logowania:

  1. <?php
  2.  
  3. include("conn.php");
  4.  
  5. if ($_SESSION['zalogowany'] != 1) {
  6.  
  7. $login = $_POST['login'];
  8. $password = $_POST['password'];
  9.  
  10. if ( isset($login) AND isset($password) )
  11. {
  12.  
  13. $sql = mysql_query("SELECT * FROM users");
  14. $row = mysql_fetch_object($sql);
  15.  
  16. if($_SESSION['login']=='') $_SESSION['login']="nieznajomy";
  17.  
  18. if($row->login == $login)
  19.  
  20. if($row->password == $password){
  21.  
  22. $_SESSION['login'] = $login;
  23.  
  24. $_SESSION['zalogowany']=1;
  25. }}
  26.  
  27. echo '
  28.  
  29. <form action="index.php" method="post">
  30.  
  31. <span class="nazwa_lp">Login:</span>
  32. <input type="text" id="login" name="login">
  33.  
  34. <span class="nazwa_lp">Password:</span>
  35. <input type="password" id="pass" name="password">
  36.  
  37. <input type="submit" value="zaloguj" class="zaloguj">
  38.  
  39. </form>
  40.  
  41. '; }
  42.  
  43. else {
  44.  
  45. echo('<span class="nazwa_zalogowany">Witaj: &nbsp;&nbsp;&nbsp;' .$_SESSION['login'].'</span>
  46.  
  47. <a href="logout.php"><input type="button" name="wyloguj" value="Wyloguj" class="wyloguj"></a>');
  48.  
  49.  
  50. };
  51.  
  52. ?>


To jest plik logout.php

  1. <?
  2. $_SESSION['zalogowany']=0;
  3.  
  4. include("index.php");
  5. ?>


A to jest kod który mam w index.php

  1. <div id="div_logowanie">
  2.  
  3. <?
  4. if($_SESSION['zalogowany']!=1) include('login.php');
  5.  
  6. else {
  7.  
  8. echo('<span class="nazwa_zalogowany">Witaj: &nbsp;&nbsp;&nbsp;' .$_SESSION['login'].'</span>
  9.  
  10. <a href="logout.php"><input type="button" name="wyloguj" value="Wyloguj" class="wyloguj"></a>');
  11. }
  12. ?>
  13.  
  14. </div>



Z góry dziękuję za pomoc w naprawieniu tych skryptów. Pozdrawiam
darko
Na początku każdego skryptu, w którym korzystasz z sesji musi
Kwpolska
Kod jest nieczytelny!
  1. if ( isset($login) AND isset($password) )

1. zawartość tego ifa jest napisana chaotycznie, nic z tego nie zrozumiałem.
było sprawdzić to tak:
  1. <?php
  2. if $SERVER['REQUEST_METHOD'] == "POST" {
  3. // definiowanie dobrehaslo i dobrylogin na podstawie bazy danych
  4. if ($password == $dobrehaslo && $login == $dobrylogin)
  5. {
  6. $_SESSION['login'] = $login;
  7. $_SESSION['zalogowany']=1;
  8. echo 'zalogowano';
  9. } else {
  10. echo 'zle dane';
  11. }
  12. } else {
  13. //logowajdło
  14. ?>

2. NIGDZIE nie inicjujesz sesji.
3. Plik do wylogowywania wersja poprawiona:
  1. <?php
  2. header("index.php");

4. System sesji jest do niczego. Świetnie napisany i rozpisany system jest na Wikibooks. http://pl.wikibooks.org/wiki/PHP/Sesje
Dobrą praktyką jest pisanie komentarzy, żeby móc potem zrozumieć kod.
MateuszS
do wylogowania lepiej uzywac session_destroy();
Dziadzia
Zapomniałem dodać, że oczywiście w pliku index.php na samym początku jest

  1. <?php
  2.  
  3. session_register($zalogowany, $login);
  4.  
  5. ?>


Jeżeli w pliku logout.php daje session_destroy(); wyskakuje mi taki błąd:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\Program Files\WebServ\httpd\cms\logout.php:7) in C:\Program Files\WebServ\httpd\cms\index.php on line 2

Logowanie cały czas mi działa... lecz nie znacie przyczyny, czemu muszę przeładować stronę aby pojawił się komunikat Witaj admin zamiast miejsc do wpisywania loginu i hasła?
R4D3K
Cytat
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\Program Files\WebServ\httpd\cms\logout.php:7) in C:\Program Files\WebServ\httpd\cms\index.php on line 2

Przed session_start() nic nie powinno się znajdować !
Dziadzia
Oczywiście, że nic nie ma...

  1. <?php
  2.  
  3. session_register($zalogowany, $login);
  4.  
  5. ?>
  6.  
  7. <html>
  8. <head>


tak wyglądają pierwsze linijki index.php
darko
Nie nie , to albo podaj cały kod, który oddajesz do analizy, albo nikt nie będzie wróżył, co Ty tam jeszcze masz wcześniej w pliku index.php i dalej w innych plikach. Najlepiej gdybyś podał pełny listing wszystkich plików biorących udział w logowaniu + podstrony, o których wspominasz.
Dziadzia
plik index.php

  1. <?php
  2.  
  3. session_register($zalogowany, $login);
  4.  
  5. ?>
  6.  
  7. <html>
  8. <head>
  9. ...
  10.  
  11. <div id="div_logowanie">
  12.  
  13. <?
  14. if($_SESSION['zalogowany']!=1) include('login.php');
  15.  
  16. else {
  17.  
  18. echo('<span class="nazwa_zalogowany">Witaj: &nbsp;&nbsp;&nbsp;' .$_SESSION['login'].'</span>
  19.  
  20. <a href="logout.php"><input type="button" name="wyloguj" value="Wyloguj" class="wyloguj"></a>');
  21. }
  22. ?>
  23.  
  24. </div>
  25.  
  26. </div>
  27.  
  28. <div id="logo"></div>
  29. ...
  30.  


plik login.php

  1. <?php
  2.  
  3. include("conn.php");
  4.  
  5. if ($_SESSION['zalogowany'] != 1) {
  6.  
  7. $login = $_POST['login'];
  8. $password = $_POST['password'];
  9.  
  10. if ( isset($login) AND isset($password) )
  11. {
  12.  
  13. $sql = mysql_query("SELECT * FROM users");
  14. $row = mysql_fetch_object($sql);
  15.  
  16. if($_SESSION['login']=='') $_SESSION['login']="nieznajomy";
  17.  
  18. if($row->login == $login)
  19.  
  20. if($row->password == $password){
  21.  
  22. $_SESSION['login'] = $login;
  23.  
  24. $_SESSION['zalogowany']=1;
  25.  
  26. }}
  27.  
  28. echo '
  29.  
  30. <form action="index.php" method="post">
  31.  
  32. <span class="nazwa_lp">Login:</span>
  33. <input type="text" id="login" name="login">
  34.  
  35. <span class="nazwa_lp">Password:</span>
  36. <input type="password" id="pass" name="password">
  37.  
  38. <input type="submit" value="zaloguj" class="zaloguj">
  39.  
  40. </form>
  41.  
  42. '; }
  43.  
  44. else {
  45.  
  46. echo('<span class="nazwa_zalogowany">Witaj: &nbsp;&nbsp;&nbsp;' .$_SESSION['login'].'</span>
  47.  
  48. <a href="logout.php"><input type="button" name="wyloguj" value="Wyloguj" class="wyloguj"></a>');
  49.  
  50.  
  51. };
  52.  
  53. ?>


plik logout.php

  1. <?php
  2.  
  3. $_SESSION['zalogowany']=0;
  4. include("index.php");
  5.  
  6. ?>


Czytałem trochę i dowiedziałem się, że musze zrobić przeładowanie strony po zalogowaniu... myślałem, że robi się to automatycznie po przyciśnięciu przycisku submit (zaloguj) z formularza logowania... Niestety nie wiem dalej jak to zrobić.

Próbowałem wylogowywać się również za pomocą tego pliku o nazwie logout.php:

  1. <?php
  2. include("index.php");
  3. ?>


i wyskakuje mi błąd:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\Program Files\WebServ\httpd\cms\logout.php:5) in C:\Program Files\WebServ\httpd\cms\index.php on line 2

Z góry dziękuje za pomoc.
Thorang Hoog
w pliku login.php dodaj jedno else:

  1. if($row->login == $login)
  2. if($row->password == $password)
  3. {
  4. $_SESSION['login'] = $login;
  5. 1$_SESSION['zalogowany']=1;
  6. }
  7. else echo '<form action="index.php" method="post">
  8. <span class="nazwa_lp">Login:</span>';...


i bym zapomniał w pliku index.php powinno być cosik takiego:

  1.  
  2. if($_SESSION['zalogowany']!=1) include('login.php');
  3. if($_SESSION['zalogowany']==1)
  4. echo '<span class="nazwa_zalogowany">Witaj:';
  5. ...

a session_destroy(); wyrzuca ci błąd bo powinieneś wykonać to przed wysłaniem jakichkolwiek danych do klienta. Najlepiej zaraz po session_start();
a najlepiej zarządzanie sesją wyżucić przed cały kod zarządzający treścią to unikniesz takich błędów winksmiley.jpg
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.