Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: unset() działa tylko 1 krok wstecz
Forum PHP.pl > Forum > Przedszkole
czezz
ustawiłem sobie przy wylogowywaniu z formularza:

  1. <?
  2. unset($_SESSION['login'];
  3. header(&#092;"location: log_again.php\");
  4. ?>


dzięki temu zmienna przekazująca nazwę loginu zostanie zniszczona a następnie zostane przekierowany do formularza logowania.
I tak:
gdy wykona się powyższy kod i kliknę w przycisk przeglądarki "WSTECZ"
zobaczę komunikat:
Kod
Uwaga: Strona wygasła Żądana strona została utworzona przy wykorzystaniu informacji przesłanych w formularzu. Strona nie jest dostępna. Ze względów bezpieczeństwa, na wszelki wypadek, program Internet Explorer nie przesyła ponownie informacji.

Aby ponownie przesłać informacje i ponownie oglądać stronę sieci Web, kliknij przycisk Odśwież.


...i było by SUPER, gdyby nie fakt, że ponowne kliknięcie "WSTECZ" pokazuje stronę gdzie zmienna $_SESSION['login'] pokazuje się z wartością, którą chciałem zniszczyć/usunąć/odrejestrować.

Czy nie ma jakiegoś polecenia, które całkowicie wyczyści wartość zmiennej sesyjnej? W manualu jest napisane, że wystarczy wpisać unset('zmienna').
dasko
ogolnie do niszczenia zmiennych sesyjnych jest session_unregister" title="Zobacz w manualu PHP" target="_manual, i w tym wypadku musisz tak zrobić.
W manualu poczytaj sobie komentarze ludzi co do tej funkcji.
czezz
Wiedziałem, że taką odpowiedź dostane sad.gif

w namual jest napisane tak:

jeżeli używasz $_SESSION (lub $HTTP_SESSION_VARS), nie używaj session_register(), session_is_registered() i session_unregister().


Daletgo używam unser(). Dla przekory próbowałem też z session_unregister(). - Efekt jest dokładnie ten sam sad.gif
dasko
Cytat
jeżeli używasz $_SESSION (lub $HTTP_SESSION_VARS), nie używaj session_register(), session_is_registered() i session_unregister().

Użycie $_SESSION nie wyklucza użycia tamtych, po prostu nie można dać:
  1. <?php
  2.  
  3. session_register($_SESSION['foo']);
  4.  
  5. ?>

wydaje mi się że o to tam chodzi.

Cytat
It took me some time to figure this out:
If you have register globals off, you probably use $_SESSION to acces you session vars. If you want clear a sessionvar inside the current script, but also in next pages, do this as follows:

session_unregister('varname');

Otherwise varname will keep returning either inside the script, or on the next pages.

unset($_SESSION['varname']) will only unset the session var on the current page.


Skoro gościu tak napisał, powinno działać...
czezz
... i i tak jak kliknę 2 razy "WSTECZ" to zmiwnna $_SESSION[login] odzyskuje swoją wartość sad.gif
FiDO
Zeby usunac sesje najpierw musi ona istniec, wiec na poczatku przed unset'em musisz miec session_start(), masz ?
czezz
mam sad.gif

wcisnąłem do tego pliku już chyba wszystko co się dało i efekt dalej jest taki sam sad.gif

  1. <?php
  2. $mobile = ($_SESSION['login']);
  3. session_unregister($_SESSION['login']);
  4. unset($_SESSION['login']);
  5.  
  6.  
  7. ?>
adif
Nie tak dawno sam miałem z tym problem i stwierdziłem że to raczej jest problem po stronie przeglądarki niż samego php, która to uparczywie próbuje wysyłać zmienne z formularza i tym samym ponownie zalogować użytkownika.

Znalazłem na to małe rozwiązanie, w pewnym sensie oszukuję przeglądarkę - u mnie działa - więc spróbuj tego:

zaraz po zalogowaniu jak tworzysz sobie zmienna sesji:

ja to robie bez uzycia session_register, a mianowicie:
  1. <?php
  2.  
  3.  $login = $_POST['login'];
  4.  
  5.  $_SESSION['uzytkownik'] = $login;
  6.  
  7. ?>



przekierowujesz użytkownika do nowej lokalizacji przy pomocy skryptu:
  1. <?php
  2.  
  3. echo '<script>location.replace (\"index.php\")</SCRIPT>';
  4.  
  5. ?>

Wówczas po wylogowaniu:

  1. <?php
  2.  
  3. unset($_SESSION['uzytkownik']);
  4.  
  5. ?>


jak dajesz w przeglądarce wstecz nagle okazuje się że już nie chce wysyłać ponownie danych i jesteś poprawnie wylogowany.

Szczerze mówiąc jestem ciekawy czy zadziała to u Ciebie bo zdziwiło mnie kiedy zadziałało u mnie

pozdrawiam
bobi
A co z ciasteczkami? winksmiley.jpg
id4
Witam

Ja zawsze robię tak, że po poprawnym zalogowaniu wysyłam użytkownika do nowej podstrony czy to przez header(), czy przez JS (jak @adif). Powoduje to taki efekt, że po wymuszonym przeskoku do innej podstrony (inną może być również obecna) jest taki, że dane z formularza nie są umieszczone w tablicy wysyłanej z przeglądarki. Nie ma wówczas żadnego problemu z przycikami wstecz itp. Nie ma też takiego efektu po zalogowaniu, że jak klikniemy F5 to ponownie będzie pytał, czy wysłać dane z forma. Działą na 100% - bo wszędzie to stosuje.
brachu
jezeli moge dodac swoje 3grosze to zawsze mozna pokombinowac inaczej - bo jezeli chodzi tylko o wylogowanie poprawne uzytkownika to zawsze mozna zrobic tak:
  1. <?php
  2. session_register(&#092;"up\",\"im\",\"naz\",\"login\");
  3.  
  4. if($HTTP_GET_VARS['w']==1){
  5. $im=null;
  6. $naz=null;
  7. $login=null;
  8. $up=null;
  9. }
  10. ?>

wiem ze to troche na chama worriedsmiley.gif ale dziala w polaczeniu z lista uzytkownikow w MySQL-u i nie mialem jakies wiekszych problemow z tym narazie;)

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