Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]problem z sesjami
siemieng
post
Post #1





Grupa: Zarejestrowani
Postów: 101
Pomógł: 7
Dołączył: 16.01.2007

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


Widze ze przesadzilem z wielkoscia opisu problemu w poprzednim poscie, dlatego przedstawie go raz jeszcze znacznie skracjac:

Problem dotyczy sesji (istota problemu w najbardziej skrotowej wersji):

  1. <?php
  2. //zmienna weryfikujaca poprawnosc sesji uzytkownika
  3. session_start(); (isset($_SESSION['isValid'])) ? $_SESSION['isValid'] : true;
  4.  
  5. //funkcja bledu
  6. function error() {
  7.    $_SESSION['isValid'] = false;
  8. }
  9.  
  10. //funkcja sesji
  11. function session() {
  12.   if(!$_SESSION['isValid']) {
  13.       $sessionName = session_name();
  14.       if (isset($_COOKIE[$sessionName])) {
  15.          setcookie($sessionName, '', time()-3600, '/');
  16.       }
  17.   }
  18.   echo '<meta http-equiv="refresh" content="0; url=index.php"/>';
  19. }
  20.  
  21. //wywolanie funckji sesji
  22. session();
  23.  
  24. //dowolny kod z if-em
  25. $var = (!$result) ? die(error()) : $result;
  26. ?>


Problem polega na jak gdyby wykonaniu instrukcji warunkowej bez spelnienia jej warunkow. W tym przypadku jeśli zmienna $result = true, zostanie wykonana funkcja error() - znaczy w oryginalnej postaci jest ona znacznie rozbudowana (dochodzi zapisanie danych bledu, wyswietlenie komunikatu o bledzie) - te "podfunkcje" funckji bledow nie zostana wykonane, jedynie zostanie zmieniona wartosc $_SESSION['isValid'] na flase.

Zastanawiam sie jak jest to mozlwie, poniewaz warunke na 100% nie jest spelniony - podmienienie $var = (!$result) ? die(error()) : $result; na echo $var = (!$result) ? 'false' : 'true'; zawsze wyswietli 'true'. Zeby zmienna $_SESSION['isValid'] miala wartosc true, musze usunac funkcje error() z die() lub w samej funkcji error() musze usunac $_SESSION['isValid'] = false;

Prosze o poddanie pomyslu dlaczego tak sie dzieje, przeciez warunek nie jest spelniony czyli wywolanie funckji nie powinno nastapic, a ono jak gdyby nastepuje (jak gdyby bo jak pisalem z zadan funckjji error wykonane zostaje tylko zmiana wartosci $_SESSION['isValid'] na false), z gory dzieki pozdaawiam

Ten post edytował siemieng 1.07.2009, 20:59:02
Go to the top of the page
+Quote Post

Posty w temacie


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: 3.10.2025 - 06:36