Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Błędne wylogowanie - zakończenie sesji
Forum PHP.pl > Forum > Przedszkole
dawido000
Mam 3 pliki: handlowiec.php (strona logująca) , panel_handlowy.php (strona która pojawia się po zalogowaniu) , wyloguj.php (strona zawierająca skrypt, który kończy sesję i przekierowuje do handlowiec.php)

Gdy zaloguję się na stronie handlowiec.php, dostaję się do strony panel_handlowy.php, gdzie z kolei uruchamiam link który uruchamia wyloguj.php i przekierowuje mnie na stronę logowania.

Wszystko by było ładnie pięknie, ale dlaczego bo wylogowaniu mogę dostać się przez przeglądarkę do strony panel_handlowy.php bez żadnego ponownego logowania.

Zawartość wyloguj.php:
  1. <?php
  2. $_SESSION = array();
  3.  
  4. if ($_SESSION)
  5. echo "Wylogowanie nie nastąpiło!";
  6. else
  7. header('Location: http://'.$_SERVER['HTTP_HOST'].'/handlowiec.php');
  8. ?>


Zawartość panel_handlowy.php (fragment początkowy):
  1. <?php
  2. if (!$_SESSION)
  3. {
  4. header('Location: http://'.$_SERVER['HTTP_HOST'].'/handlowiec.php');
  5. }
  6. ?>
mat-bi
a gdzie session_start... ?
CuteOne
logowanie:

  1. <?php
  2.  
  3. $_SESSION['login'] = 'fefe';
  4. ?>


wylogowanie:
  1. <?php
  2.  
  3. if(!empty($_SESSION['login'])) session_destroy();
  4.  
  5. ?>


handlowiec:
  1. <?php
  2.  
  3. if(!empty($_SESSION['login'])) header('Location: http://'.$_SERVER['HTTP_HOST'].'/handlowiec.php');
  4.  
  5. ?>

dawido000
ok, dodałem w pliku panel_handlowy.php funkcję session_start();

mimo wszystko cały czas mogę się dostać do tej strony
kaem
session_destroy <-- a wystarczy przeczytać dwa pierwsze zdania w manualu.
Z tego wynika, że
  1. if(!$_SESSION)
to za mało. Najlepiej usunąć całkowicie ciasteczka sesji, albo w Twoim przypadku zrobić tak:
  1. if(!$_SESSION['login'])
dawido000
spróbowałem z s_login - dalej nic

ale dziwne, bo przecież w pliku wyloguj.php też jest sprawdzany warunek czy tablica sesji istnieje i wychodzi że nie istnieje (po skasowaniu sesji). Wniosek z tego, że wszystko jest ok i po wylogowaniu jesteśmy przerzucani do strony handlowiec.php

no i nikt nie ma pomysłu...
Daiquiri
Ale w czym Ty konkretnie masz problem? Użytkownik może się dostać do panel_handlowy.php, mimo iż go wylogowujesz? Zrób tam sobie echo/var_dump z sesji i wszystko będzie jasne.
zawodnik
Z tego co wiem, to session_destroy nie usuwa $_SESSION, ale tylko jej zawartość. Więc nie możesz sprawdzać if(!$_SESSION). Może przeglądarka korzysta z cache? Sam tak miałem i jak czyściłem cache, to było ok.
dawido000
a jak czyścić cache używając poleceń php
CuteOne
Na górze napisałem dokładnie co i jak trzeba zrobić a ty dalej swoje :/
dawido000
Niestety nie działa to co napisałeś CuteOne.

Przedstawiam pewne podpowiedzi:

Zmodyfikowałem plik wyloguj.php do takiej postaci:
  1. <?php
  2. // echo numer 1
  3. echo "Wartość funkcji empty przed kasowaniem zmiennych sesji: ".empty($_SESSION['s_login'])."</br>";
  4.  
  5.  
  6.  
  7. unset($_SESSION['s_login']);
  8. $_SESSION = array();
  9.  
  10. if(empty($_SESSION['s_login']))
  11. {
  12. // echo numer 2
  13. echo "Wartość funkcji empty po skasowaniu zmiennych sesji: ".empty($_SESSION['s_login'])."</br>";
  14. //header('Location: http://'.$_SERVER['HTTP_HOST'].'/handlowiec.php');
  15. }
  16. else
  17. echo "Błąd: brak wylogowania";
  18. ?>


Wynikiem przy pierwszym wywołaniu jest:

Wartość funkcji empty przed kasowaniem zmiennych sesji:
Wartość funkcji empty po skasowaniu zmiennych sesji: 1

Wynikiem przy naciśnięciu odśwież jest:

Wartość funkcji empty przed kasowaniem zmiennych sesji: 1
Wartość funkcji empty po skasowaniu zmiennych sesji: 1

Dziwne nieprawdaż?
muk4
Nie, nie dziwne. empty zwraca 1 dla PUSTEJ zmiennej i 0 / nic dla zmiennej w której coś jest (w tym przypadku login). Właściwie to zamiast empty powinieneś użyć isset, ale mniejsza o to.


Cytat
Wartość funkcji empty przed kasowaniem zmiennych sesji: <- tutaj jest puste czyli fałsz - zmienna nie jest pusta, czyli jest ustawiony w niej login
Wartość funkcji empty po skasowaniu zmiennych sesji: 1 <- empty zwraca 1 czyli prawdę - zmienna jest pusta / usunięta

Wynikiem przy naciśnięciu odśwież jest:

Wartość funkcji empty przed kasowaniem zmiennych sesji: 1 <- odświeżasz stronę, ale się nie logujesz więc zmienna dalej jest pusta bo ją wcześniej usunąłeś
Wartość funkcji empty po skasowaniu zmiennych sesji: 1 <- jw.
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.