Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [HTML][PHP]Błędne wylogowanie - zakończenie sesji
dawido000
post
Post #1





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 28.03.2011

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


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. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
mat-bi
post
Post #2





Grupa: Zarejestrowani
Postów: 690
Pomógł: 92
Dołączył: 6.02.2011

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


a gdzie session_start... ?
Go to the top of the page
+Quote Post
CuteOne
post
Post #3





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


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. ?>

Go to the top of the page
+Quote Post
dawido000
post
Post #4





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 28.03.2011

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


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

mimo wszystko cały czas mogę się dostać do tej strony
Go to the top of the page
+Quote Post
kaem
post
Post #5





Grupa: Zarejestrowani
Postów: 248
Pomógł: 38
Dołączył: 29.06.2008

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


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'])
Go to the top of the page
+Quote Post
dawido000
post
Post #6





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 28.03.2011

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


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...

Ten post edytował dawido000 8.07.2011, 21:13:01
Go to the top of the page
+Quote Post
Daiquiri
post
Post #7





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




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.
Go to the top of the page
+Quote Post
zawodnik
post
Post #8





Grupa: Zarejestrowani
Postów: 44
Pomógł: 1
Dołączył: 4.06.2011

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


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.
Go to the top of the page
+Quote Post
dawido000
post
Post #9





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 28.03.2011

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


a jak czyścić cache używając poleceń php
Go to the top of the page
+Quote Post
CuteOne
post
Post #10





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Na górze napisałem dokładnie co i jak trzeba zrobić a ty dalej swoje :/
Go to the top of the page
+Quote Post
dawido000
post
Post #11





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 28.03.2011

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


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ż?
Go to the top of the page
+Quote Post
muk4
post
Post #12





Grupa: Zarejestrowani
Postów: 309
Pomógł: 56
Dołączył: 3.11.2006
Skąd: Gliwice

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


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.


Ten post edytował muk4 11.07.2011, 12:37:29
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.08.2025 - 23:38