Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] wylogowywanie
Forum PHP.pl > Forum > Przedszkole
gosc
Witam!
Mam problem ze skryptem wylogowania, a mianowicie.

Gdy się zaloguje i kliknę na przycisk "Wyloguj" to przenosi mnie na stronę logowania, ale nie wylogowywuje.

  1. <?php
  2. $_SESSION = array();
  3. if (isset($_COOKIE[session_name()]))
  4. setcookie(session_name(), '', time()-42000, '/');
  5. Header('location: login.php');
  6. ?>


Na czym może polegać problem?
Kostek.88
Bo nie jest spełniony warunek z linijki 4. questionmark.gif Uważam, że powinieneś go w ogóle pominąć i po prostu zniszczyć sesję. Poza tym logowanie powinieneś robić raczej na sesjach, a nie mieszać tego z cookie, tym bardziej, że sesja to nic innego jak cookie... z tym, że w innej formie... w Google jest sporo wyjaśnień na ten temat.

EDIT: zerknąłem jeszcze raz na kod... i tak wnioskuję, że to cookie to Ci chyba potrzebne było do czegoś innego... możesz wyjaśnić?
Gość
W poście wyżej podalem skrypt z całkiem innego CMS'u, a tutaj zamieszczam wlasciwy, ktory takze nie dziala..

  1. <?php
  2. $_SESSION=array();
  3. Header('location: login.php');
  4. ?>
Kostek.88
Daj przed Header...

  1. print_r($_SESSION); exit;


i daj wynik. Poza tym daj też kod tworzenia tej sesji. Możesz próbować ją jeszcze zlikwidować poprzez unset, ale musisz znać dokładny element tablicy $_SESSION, np. $_SESSION['user']. Jak jest u Ciebie? A o jakim CMS-ie mówisz?

EDIT: ładny przykład z manuala

  1. <?php
  2. setcookie(session_name(),'',0,'/');
  3. ?>


źródło: session_unset
Gość
Kod podany w pierwszym poście jest mojego kolegi. On tworzył CMS'a i pomagałem mu przy sesji, ale nam nie wyszło i przez przypadek skopiowałem jego kod. Mój kod podałem w drugim poście..

A, wracając do tematu po dodaniu wyskoczyło:
  1. Array ( )
-gość-
  1. // Sprawdzamy czy dane, które podał użytkownik są takie same jak w bazie danych.
  2. $check = mysql_query("SELECT * FROM users WHERE login='$login' AND haslo='$haslo'");
  3. $result = mysql_num_rows($check);
  4. if ($result==1) {
  5. $_SESSION['logged']='ok';
  6. echo "<center>Zostałeś/aś pomyślnie zalogowany/a do serwisu.</center>";
  7. }
  8. if ($result==0) {
  9. echo ("<center>Podane dane są nieprawidłowe.</center>");
  10. }


A, tutaj wyciąg z login jak widać $_SESSION['logged']
Kostek.88
Przeczytaj mój powyższy post, bo go edytowałem, a jak nie pomoże to odpowiedz mi na pytanie: jak sprawdzasz autoryzację użytkownika na stronie?
Gość
unset nie pomógł, a tutaj login..

  1. // Sprawdzamy czy dane, które podał użytkownik są takie same jak w bazie danych.
  2.  
  3. $check = mysql_query("SELECT * FROM users WHERE login='$login' AND haslo='$haslo'");
  4.  
  5. $result = mysql_num_rows($check);
  6.  
  7. if ($result==1) {
  8.  
  9. $_SESSION['logged']='ok';
  10.  
  11. echo "<center>Zostałeś/aś pomyślnie zalogowany/a do serwisu.</center>";
  12.  
  13. }
  14.  
  15. if ($result==0) {
  16.  
  17. echo ("<center>Podane dane są nieprawidłowe.</center>");
  18.  
  19. }
Kostek.88
1)A to próbowałeś?
  1. <?php
  2. setcookie(session_name(),'',0,'/');
  3. ?>


2) Poza tym chodziło mi o to, jak później na każdej podstronie sprawdzasz czy użytkownik jest zalogowany, czy nie?

3) Próbowałeś odświeżyć stronę po wylogowaniu? Chodzi mi o ten moment, po którym już zostałeś przeniesiony na index.php

4) Usuń cache, sesje itd. z przeglądarki, potem na nowo się zaloguj i spróbuj wylogować

5) Próbowałeś w innej przeglądarce?

6) Jakiej przeglądarki używasz?
Gość
Używam przeglądardki Opera i na tym komputerze nie mam żadnej innej. Jutro sprawdzę na firefox'ie.
Nie mam innych podstron oprócz login.php / register.php / index.php oraz logout.php

Wyczyszczenie ciasteczek nic nie daje
Gość
Sprawdziłem na firefox i też to samo.
Kostek.88
W dalszym ciągu czekam (w zasadzie już nie czekam, bo idę spać tongue.gif ) na odpowiedzi do punktu 1 i 2 (wychodzi na to, ze oczekuję kodu index.php). Kiedyś miałem na FF problem z niszczeniem sesji, ale konflikt powodował dodatek HTML Validator wink.gif Po prostu wiem, że czasami oprogramowanie płata figle wink.gif
-gość-
  1. <?php
  2. include ("config/polacz.php");
  3. include ("page_header.php");
  4. ?>
  5.  
  6. <center>test</center>
  7.  
  8. <?php include ("page_footer.php"); ?>


Oto index.php
Kostek.88
Gosciu.... Daj mi w koncu ten plik gdzie trzymasz sprawdzanie, czy uzytkownik jest zalogowany, wysylasz mi jakis plik, gdzie mam 3 include i napis test. Bez przesady, pomysl troche... Sorry, ale musialem to napisac...
Gość
Wczoraj było już za późno i nie myślalem. Tutaj sprawdzanie:

  1. // Sprawdzamy czy dane, które podał użytkownik są takie same jak w bazie danych.
  2. $check = mysql_query("SELECT * FROM users WHERE login='$login' AND haslo='$haslo'");
  3. $result = mysql_num_rows($check);
  4. if ($result==1) {
  5. $_SESSION['logged']='ok';
  6. echo "<center>Zostałeś/aś pomyślnie zalogowany/a do serwisu.</center>";
  7. }
  8. if ($result==0) {
  9. echo ("<center>Podane dane są nieprawidłowe.</center>");
  10. }
  11.  
  12. // Sprawdzamy czy użytkownik jest zalogowany.
  13. if($_SESSION['logged']) {
  14. echo 'wyloguj';
  15. }
  16. else {
  17. echo 'zaloguj';
  18. }
Majkelo23
http://michael2318.pl/?p=142

Zobacz sobie jak ma to wyglądać.
Kostek.88
W zasadzie to widzę, że to jest zrobione nieprawidłowo, albo sam zgubiłem się w tych plikach...

generalnie robisz pliki

- zaloguj.php
- wyloguj.php
- formularz.php
- index.php

w index.php dajesz

  1.  
  2. if($_SESSION['logged'] == false) { // jak nie ma sesji to wywala Cię do logowania
  3. header('Location: formularz.php');
  4. }
  5.  
  6. // a tutaj właściwa treść strony


formularz.php
  1. // cały formularz z akcją na plik zaloguj.php


zaloguj.php
  1. session_start(); // pamiętaj, zawsze na początku ma to być... znaczy nie tak znowu zawsze, ale tak teraz przyjmujemy, co by nie było dodatkowych problemów
  2.  
  3. // tu tworzysz sesję
  4.  
  5. $_SESSION['logged'] = true;
  6.  


wyloguj.php

  1.  
  2. // możesz spróbować tutaj dać to z manuala, ale generalnie ja dawałem zawsze unset($_SESSION['logged']) i session_destroy();
  3. setcookie(session_name(),'',0,'/');
  4.  


Powinno działać najprostsze logowanie
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.