Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z sesjami
Kas
post
Post #1





Grupa: Zarejestrowani
Postów: 425
Pomógł: 0
Dołączył: 28.05.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Mam problem z obsługą sesji. W pliku form.html znajduje się prosty formularza logowania:

  1. <?php
  2. session_start();
  3. require_once('database.html');
  4. require_once('header.html');
  5. ?>
  6.  
  7. <form action="login.html" method="post">
  8. <div>
  9. <fieldset><legend>Logowanie</legend>
  10. Nazwa użytkownika <input type="text" name="login" value="" /><br />
  11. Hasło <input type="text" name="password" value="" /><br />
  12. Captcha <input type="text" name="captcha" value="" /><br />
  13. <input type="submit" value="Logowanie" /></td>
  14. </div>
  15. </form>
  16. <?php
  17. if(!empty($_SESSION))
  18. {
  19. echo('Błąd logowania. Niepoprawny login lub hasło. Prosimy spróbować ponownie.');
  20. }?>


Skrypt w pliku przetwarza dane:

  1. <?php
  2. $_SESSION['started'] == true;
  3.  
  4. [...]
  5.  
  6. header("Location: profile.html");


Profile.html sprawdza sesję:

  1. if($_SESSION['started'] == 'true');
  2. {
  3. if(!empty($_SESSION['login']))
  4. {
  5. echo('Zalogowany!');
  6. echo('<a href="logout.html">Wyloguj</a>');
  7. }
  8. else {
  9.  
  10. header("Location: form.html");
  11. }


Jeżeli w form.html wpiszę błędne dane to zostaję automatycznie, w ułamku sekundy przekierowany z powrotem. Niestety, komunikat o błędzie się nie wyświetla, sesja nie działa poprawnie. Dlaczego? Przecież skrypt przechodzi całą ścieżkę form.html » login.html » profile.html » form.html, a wszystkie zaczynają się od session_start();

Na marginesie: czy jest jakiś lepszy niż sesje sposób przekazania komunikatu o błędzie pomiędzy skryptami?


--------------------
nospor, jestem z Wami.
Alpha IT
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nigdzie tu nie widzę, byś w sesji przenosił jakikolwiek komunikat o błędzie.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kas
post
Post #3





Grupa: Zarejestrowani
Postów: 425
Pomógł: 0
Dołączył: 28.05.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Źle się wyraziłem. Chodzi o ten fragment:

  1. <?php
  2. if(!empty($_SESSION))
  3. {
  4. echo('Błąd logowania. Niepoprawny login lub hasło. Prosimy spróbować ponownie.');
  5. }?>


Oczywiście, warunek będzie dużo bardziej rozbudowany: jeżeli sesja została zainicjowana, tablica $_SESSION nie jest pusta, a mimo to nie ma pewnej zmiennej sesyjnej, to musiał nastąpić błąd logowania. Problem w tym, że nawet tak prosty warunek if(!empty($_SESSION)) nie działa, bo sesja coś nawala. Czemu? Jakiś inny pomysł na zrealizowanie tego samego zadania?


--------------------
nospor, jestem z Wami.
Alpha IT
Go to the top of the page
+Quote Post
Yhy
post
Post #4





Grupa: Zarejestrowani
Postów: 22
Pomógł: 1
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


Po pierwsze pliki powinny mieć końcówkę .php, po drugie poczytaj o sesjach bo z tego co Ty tu tworzysz to nie wiem co chcesz utworzyć.

Sprawdzasz dane przesłane z formularza, pytasz bazy czy co tam używasz do trzymania danych, czy dane się zgadzają i logujesz np. w taki sposób -

  1.  
  2. $_SESSION['login'] = $login;
  3.  


Następnie w profilu sprawdzasz -

  1.  
  2. if( $_SESSION == ''){
  3. header(Location: form.html);
  4. }
  5. else{
  6. $login = $_SESSION['login'];
  7. }


i wsio.
Go to the top of the page
+Quote Post
Kas
post
Post #5





Grupa: Zarejestrowani
Postów: 425
Pomógł: 0
Dołączył: 28.05.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Kto powiedział, że kod PHP musi znajdować się w plikach .php? Nie bez powodu używam rozszerzenia .html.

Przeczytaj jeszcze raz pierwszego posta. W login.html:

  1. $_SESSION['started'] == true;
  2.  
  3. [...]
  4.  
  5. $_SESSION['user'] = $result[2];
  6. $_SESSION['login'] = $login;
  7.  
  8. [...]
  9.  
  10. header("Location: profile.html");


W profile.html:

  1. if($_SESSION['started'] == 'true');
  2. {
  3. if(!empty($_SESSION['login']))
  4. {
  5. echo('Zalogowany!');
  6. echo('<a href="logout.html">Wyloguj</a>');
  7. }
  8. else {
  9.  
  10. header("Location: form.html");
  11. }


Czy jeżeli nastąpił błąd logowania to profile.html przekierowuje do form.html. Tu pojawia się problem, bo po przekierowaniu z powrotem do form.html sesja nie działa.

Ten post edytował Kas 12.10.2011, 10:13:56


--------------------
nospor, jestem z Wami.
Alpha IT
Go to the top of the page
+Quote Post
Yhy
post
Post #6





Grupa: Zarejestrowani
Postów: 22
Pomógł: 1
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


Wstaw cały kod, a nie jakieś wycinki bo nic z nich nie wiadomo.
Go to the top of the page
+Quote Post
Kas
post
Post #7





Grupa: Zarejestrowani
Postów: 425
Pomógł: 0
Dołączył: 28.05.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Dobra, znalazłem błąd. smile.gif Durna literówka (operacja porównania, zamiast przypisania), ale dzięki za pomoc. smile.gif


--------------------
nospor, jestem z Wami.
Alpha IT
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 17:45