Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zniszczenie zmiennej sesyjnej
marcinp1984
post 14.06.2009, 21:41:26
Post #1





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 17.05.2009

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


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 16)
nmts
post 14.06.2009, 23:06:41
Post #2





Grupa: Zarejestrowani
Postów: 283
Pomógł: 34
Dołączył: 21.03.2008

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


Wydaje mi się, że nie ma nic takiego jak destroy_session();
Spróbuj session_unset(); i/lub session_destroy(); i będzie działać.


--------------------
Free Web Tools - narzędzia dla programistów, webdeveloperów i specjalistów seo...
Go to the top of the page
+Quote Post
marcinp1984
post 14.06.2009, 23:22:56
Post #3





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 17.05.2009

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


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
Go to the top of the page
+Quote Post
ptq
post 26.08.2009, 08:52:58
Post #4





Grupa: Zarejestrowani
Postów: 44
Pomógł: 2
Dołączył: 25.08.2009

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


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


--------------------
Jeżeli czegoś się nie da zrobić,
daj to do zrobienia komuś kto o tym nie wie,
na pewno to zrobi...
Go to the top of the page
+Quote Post
zzeus
post 26.08.2009, 08:59:03
Post #5





Grupa: Zarejestrowani
Postów: 441
Pomógł: 71
Dołączył: 3.09.2007
Skąd: wrocław

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


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


--------------------
Go to the top of the page
+Quote Post
ptq
post 26.08.2009, 11:22:46
Post #6





Grupa: Zarejestrowani
Postów: 44
Pomógł: 2
Dołączył: 25.08.2009

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


  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.


--------------------
Jeżeli czegoś się nie da zrobić,
daj to do zrobienia komuś kto o tym nie wie,
na pewno to zrobi...
Go to the top of the page
+Quote Post
BigB
post 27.08.2009, 22:44:49
Post #7





Grupa: Zarejestrowani
Postów: 16
Pomógł: 1
Dołączył: 28.07.2009

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


Pokaż kod jak nadajesz wartość dla $_GET['l'] bo to co pokazałeś nic nie mówi.
Go to the top of the page
+Quote Post
ptq
post 27.08.2009, 23:54:35
Post #8





Grupa: Zarejestrowani
Postów: 44
Pomógł: 2
Dołączył: 25.08.2009

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


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.


--------------------
Jeżeli czegoś się nie da zrobić,
daj to do zrobienia komuś kto o tym nie wie,
na pewno to zrobi...
Go to the top of the page
+Quote Post
thek
post 28.08.2009, 00:48:15
Post #9





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
BigB
post 28.08.2009, 10:09:56
Post #10





Grupa: Zarejestrowani
Postów: 16
Pomógł: 1
Dołączył: 28.07.2009

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


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.

Ten post edytował BigB 28.08.2009, 10:11:00
Go to the top of the page
+Quote Post
ptq
post 29.08.2009, 11:25:31
Post #11





Grupa: Zarejestrowani
Postów: 44
Pomógł: 2
Dołączył: 25.08.2009

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


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

Ten post edytował ptq 29.08.2009, 11:31:09


--------------------
Jeżeli czegoś się nie da zrobić,
daj to do zrobienia komuś kto o tym nie wie,
na pewno to zrobi...
Go to the top of the page
+Quote Post
erix
post 29.08.2009, 11:39:18
Post #12





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
ptq
post 29.08.2009, 22:35:53
Post #13





Grupa: Zarejestrowani
Postów: 44
Pomógł: 2
Dołączył: 25.08.2009

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


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


--------------------
Jeżeli czegoś się nie da zrobić,
daj to do zrobienia komuś kto o tym nie wie,
na pewno to zrobi...
Go to the top of the page
+Quote Post
thek
post 30.08.2009, 01:41:06
Post #14





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
ptq
post 30.08.2009, 12:01:34
Post #15





Grupa: Zarejestrowani
Postów: 44
Pomógł: 2
Dołączył: 25.08.2009

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


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


--------------------
Jeżeli czegoś się nie da zrobić,
daj to do zrobienia komuś kto o tym nie wie,
na pewno to zrobi...
Go to the top of the page
+Quote Post
franki01
post 30.08.2009, 21:41:20
Post #16





Grupa: Zarejestrowani
Postów: 508
Pomógł: 75
Dołączył: 2.11.2005
Skąd: Bydgoszcz

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


A jesteś pewien, że masz session_start i że katalog na serwerze dla sesji istnieje i ma chmod 0777?
Go to the top of the page
+Quote Post
ptq
post 30.08.2009, 22:18:41
Post #17





Grupa: Zarejestrowani
Postów: 44
Pomógł: 2
Dołączył: 25.08.2009

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


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


--------------------
Jeżeli czegoś się nie da zrobić,
daj to do zrobienia komuś kto o tym nie wie,
na pewno to zrobi...
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 10:27