Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zniszczenie zmiennej sesyjnej
Forum PHP.pl > Forum > PHP
marcinp1984
No dobra może napisze nowy temat bo tamten poprzedni który tyczył się troszkę czegoś innego już chyba nikt nie czyta więc nikt ni zobaczy co do niego dopisałem biggrin.gif
A więc tak:

mam plik haslo.php


  1. <?php
  2. $_SESSION[id]=$id;
  3.  
  4.       if($_GET[page]=='0')    
  5.          {
  6.          header("Location: ../index.php");
  7.          }
  8.       else  
  9.          if($_GET[page]=='1')    
  10.             {
  11.             header("Location: forum.php");
  12.             }
  13.          else
  14.             if($_GET[page]=='2')    
  15.                {
  16.                header("Location: forum2.php?id_tematu=$_GET[id_tematu]");
  17.                }
  18.             else
  19.                {
  20.                if($_GET[page]=='3')    
  21.                    {        
  22.                    header("Location: tematyuzytkownikow.php?id_tematu=$_GET[id_tematu]&id_tematu_pom=$_GET[id_tematu_pom]");    
  23.                    }
  24.                else
  25.                    {
  26.                    if($_GET[page]=='4')    
  27.                       {        
  28.                       header("Location: wpisy.php?id_tematu=$_GET[id_tematu]&id_tematu_pom=$_GET[id_tematu_pom]&id_tematu_pom2=$_GET[id_tematu_pom2]");    
  29.                       }                
  30.                    }    
  31.                 }    
  32.           }
  33. ?>


poprzez którą loguje się na różne podstronki i zapamiętuje w sesji $_SESSION[id]=$id;

na każdej stronce gdzie korzystam ze zmiennej sesyjnej oczywiście mam umieszczone session_start();

no i teraz chce się z niej wylogować i jakoś zniszczyć tą zmienną sesyją co mi w ogóle nie wychodzi :/

np mam takie coś <a href='forum/wyloguj.php?page=0' class='wyloguj'> (wyloguj)</a>


i plik wyloguj.php



  1. <?php
  2.  
  3. destroy_session();
  4. UNSET($_SESSION[id]);
  5.  
  6.       if($_GET[page]=='0')    
  7.          {
  8.          header("Location: ../index.php");
  9.          }
  10.       else
  11.          {  
  12.          if($_GET[page]=='1')    
  13.             {
  14.             header("Location: forum.php");
  15.             }
  16.          else
  17.             if($_GET[page]=='2')    
  18.                {
  19.                header("Location: forum2.php?id_tematu=$_GET[id_tematu]");
  20.                }
  21.             else
  22.                {
  23.                if($_GET[page]=='3')    
  24.                    {        
  25.                    header("Location: tematyuzytkownikow.php?id_tematu=$_GET[id_tematu]&id_tematu_pom=$_GET[id_tematu_pom]");    
  26.                    }
  27.                else
  28.                    {
  29.                    if($_GET[page]=='4')    
  30.                       {      
  31.                       header("Location: wpisy.php?id_tematu=$_GET[id_tematu]&id_tematu_pom=$_GET[id_tematu_pom]&id_tematu_pom2=$_GET[id_tematu_pom2]");    
  32.                       }                
  33.                    }    
  34.                 }    
  35.            }    
  36. pg_close($dbconn);
  37. ?>



tak to się niszczy?questionmark.gif Bo ja nie mogę sobie z tym poradzić sad.gif Ciągle jest ta zmienna id i ni mogę się wylogować sad.gif
nmts
Wydaje mi się, że nie ma nic takiego jak destroy_session();
Spróbuj session_unset(); i/lub session_destroy(); i będzie działać.
marcinp1984
ahh faktycznie odwrotnie napisałem biggrin.gif
Ale ani to ani to nic nie zmienia... przechodzi przez stronkę haslo.php i jak wraca do głównej to ciągle jestem zalogowany czyli w zmiennej jest id sad.gif
Już próbowałem jakoś tak usuwać bo gdzieś znalazłem UNSET($_SESSION[id]); ale też nic :/

Jezuuuuu... i jak zwykle sam sobie stwarzam takie głupie problemy które tylko zabierają dużo czasu :/ Problem już rozwiązany smile.gif
W pliku wyloguj.php nie dodałem seesion_start(); No więc nie mogło to działać winksmiley.jpg
Dzięki za pomoc
ptq
Odświeżę temat. W jednym pliku mam logowanie i wylogowywanie, wszystko na warunkach zależnych od $_GET, lecz niezależnie od tego czy warunek wylogowania jest spełniony czy nie, sesja jest niszczona :/ Czy ktoś może wie dlaczego tak się dzieję?
zzeus
Cytat(ptq @ 26.08.2009, 09:52:58 ) *
Odświeżę temat. W jednym pliku mam logowanie i wylogowywanie, wszystko na warunkach zależnych od $_GET, lecz niezależnie od tego czy warunek wylogowania jest spełniony czy nie, sesja jest niszczona :/ Czy ktoś może wie dlaczego tak się dzieję?


Pokaż kod to może ktoś pomoże
ptq
  1. if ($_GET['l']==0 && isset($_SESSION['admin'])) {
  2. $wylogowano=$_SESSION['admin'];
  3. unset($_SESSION['admin']);
  4. if (!isset($_SESSION['admin'])) {
  5. $admin_tresc.='<p class="error">Użytkownika <b>'.$wylogowano.'</b> wylogowano.</p>';
  6. }
  7. }


warunek wykonywany niezależnie od tego czy $_GET['l'] jest równa 0 czy tez nie.
BigB
Pokaż kod jak nadajesz wartość dla $_GET['l'] bo to co pokazałeś nic nie mówi.
ptq
Poprzez link zawierający wartość tej zmiennej. Ale co to ma do rzeczy, skoro ten warunek się odpala nawet jak się nie nada wartości zmiennej $_GET['l']? Nigdzie fizycznie w kodzie nie przypisuje jej żadnej wartości, jedyna droga to kliknięcie linku.
thek
Zacznij od debuga tej zmiennej. Sprawdź czy w ogóle jest ustawiona, a jeśli tak to jaką wartością i jakim typem. Bo może się okazać, że gdzieś na tej linii coś się sypie. Debug to podstawa w tym wypadku bo inaczej niewiele się zdziała.
BigB
A, no tak, przecież to zmienna z GET'a (przysypiałem wczoraj to nie myślałem zbyt logicznie).

Przed tym IF'em daj sobie echo $_GET['l'] oraz IF, który wyświetla "OK" albo "NIC" jeśli isset zwraca true lub false.

Spróbuj także pogrupować w nawiasy te warunki if'a, czyli:

  1. ...
  2. if ( ($_GET['l']==0) && (isset($_SESSION['admin'])) ) {
  3. ...


EDIT: aha, no i jeszcze najlepiej przekonwertuj tą zmienną na typ liczbowy, bo może jest ona stringiem.
ptq
Zejdę z tematu na moment... Zdechł mi dysk, zmusił mnie do instalowania wszystkiego na nowo, i tak jakoś wpadłem na pomysł zainstalowania przy okazji nowszej wersji WAMP2 z PHP 5.3.0 smile.gif odpalam swój projekt a tu same UNDEFINED INDEX :/ od kiedy to PHP się czepia że jakaś zmienna nie została zainicjowana? Jak się pozbyć tego ustrojstwa? bo przy prawie każdym warunku z $_GET mam taki błąd sad.gif Nigdzie się z tym nie spotkałem, nawet na serwerach zewnętrznych, gdzie umieszczam swoje końcowe "wynalazki".

Czekam na HELP, bo nie mogę z tym normalnie pracować :/

Bo jeżeli nie idzie tego wyłączyć to zacznę inaczej pisać aby wszystko zaczynało się wstępnie od isset() co mi tylko zwiększy ilość kodu, ale trudno...
erix
Cytat
odpalam swój projekt a tu same UNDEFINED INDEX :/ od kiedy to PHP się czepia że jakaś zmienna nie została zainicjowana?

error_reporting. Tak btw, coś kiepsko napisałeś, że nie sprawdzasz zmiennych tongue.gif
ptq
Wiesz, napisane jest dobrze, pełna kontrola, ale za mało warunków zagnieżdżonych smile.gif

Ja miałem tak:
  1. if (isset($a) && $a==1) {
  2. echo "wykonano zadanie.";
  3. }


A powinno być tak:
  1. if (isset($a)) {
  2. if ($a==1) {
  3. echo "wykonano zadanie";
  4. }
  5. }


Oczywiście już wszystko w aktualnym projekcie zmieniłem smile.gif
Lecz musiałem troszkę nakombinować bo miałem kilka innych problemów.

No i na php 5.3 już mi samo nie niszczy sesji omijając warunek smile.gif

Opiszę nowy problem smile.gif

W pliku core.php mam petlę wyszukującą plik ustawienia.php i ustalający aktualne położenie:
  1. $folder_level = "";
  2. $i = 0;
  3. while (!file_exists($folder_level.'ustawienia.php')) {
  4. $folder_level .= "../"; $i++;
  5. if ($i == 5) {
  6. header('Location: setup.php');
  7. die();
  8. }
  9. }


Wcześniej jak dałem require('../core.php') w pliku znajdującym się o jeden katalog głębiej od core.php to ta pętla ustawiała $folder_level="../"; czyli uruchamiając plik public_html/admin/index.php, dołączał plik public_html/core.php i ustalał że public_html/ustawienia.php znajduje się o katalog wcześniej od public_html/admin/index.php i wszystko było cacy.

A teraz niezależnie od tego jak głęboko by się nie chował w katalogach plik dołączający core.php, i tak pokaże że $folder_level=""; :/

Byłem zmuszony brakiem idei cały katalog admina przenieść do głównego katalogu i "pozmieniac to i owo" aby trybiło sad.gif
thek
Gadasz głupoty z tym zagnieżdżaniem warunków winksmiley.jpg Warunki w IF są sprawdzane po kolei zgodnie z kolejnością zagnieżdżania nawiasów. W podanym przez Ciebie przykładzie nie byłoby żadnych różnic. Powiedz mi jaka jest różnica między:
  1. if (isset($a) && $a==1) {
  2. echo "wykonano zadanie.";
  3. }
a
  1. if (isset($a)) {
  2. if ($a==1) {
  3. echo "wykonano zadanie";
  4. }
  5. }
?
Powiem Ci, że żadna. W drugim przypadku sprawdzasz czy ta zmienna jest. Jeśli tak to sprawdzasz czy jest równa 1
A w drugim? Sprawdzasz od razu czy jest ustawiona i równa 1. Z jednym małym "ale". W php działa jeden ciekawy mechanizm związany z AND. Sprawdzana jest zgodność z warunkiem każdego elementu składowego. Jeśli już pierwszy nie będzie prawidłowy, to nie jest już sprawdzany żaden kolejny. Wystarczy więc, że pierwszy będzie miał FALSE a drugi nawet nie zostanie sprawdzony bo według algebry 0 i cokolwiek automatycznie da 0 czyli FALSE. W przypadku więc nie ustawienia zmiennej $a nie dojdzie dla pierwszego przypadku (z && ) do sprawdzania zawartości tej zmiennej, czyli funkcjonalnie będzie to równe przypadkowi drugiemu smile.gif Ot taka ciekawostka.

Co zaś do drugiej części pytania to pewnie w kodzie jakiegoś pliku związanego z konfiguracją zmieniłeś coś ręcznie i system zgłupiał bo odnosi się do zmienionej zmiennej i opierając na tym dochodzi do wartości null, przez co w kodzie zwraca pustkę.
ptq
W takim razie nie wiem dlaczego mając właśnie takie IFy gdzie wszystko mam w jednym warunku, wywala mi NOTICE że taka zmienna nie istnieje, nawet jak pierwszy w ifie jest test czy istnieje (isset) a potem czy jej wartość wynosi ileś tam sad.gif

Co do drugiego, wcześniej działało ustalanie zagłębienia, na serwerze zewnętrznym działa do teraz tongue.gif

Tylko wszystko mi się posypało w momencie zainstalowania innej wersji WAMP2 sad.gif miałem C a teraz mam najnowsza I i wszystko zaczęło się sypać :/

Polecam dla osób mających chwilę i możliwości, zainstalowanie WAMP2i i sprawdzenie czy ich aplikacje nie wywalą żadnego błędu i czy będą działać w ogóle tongue.gif
Bo z tego co się doczytałem, wszystko co ma zniknąć w PHP6, w PHP5.3 wywala NOTICE tongue.gif
franki01
A jesteś pewien, że masz session_start i że katalog na serwerze dla sesji istnieje i ma chmod 0777?
ptq
Cała sprawa została wyjaśniona smile.gif WAMP2 z PHP 5.3 nie za bardzo dobrze działa, gdy tylko przesiadłem się na PHP 5.2.9-2 to wszystko ruszyło i działa idealnie :/ koszmar...
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.