Obiekt i $_SESSION[]

Alcadur

Użytkownik
Dołączył
Listopad 10, 2007
Posty
107
Witam, może mi wytłumaczyć czemu podczas używania $_SESSION w funkcji obiektu który jest tworzony w case nie jest on widoczny poza nim? Do tej pory nie spotkałem się nigdzie z wykorzystaniem tego przy obiektach a to co czytałem wskazywało, że po rozpoczęciu sesji (session_start()) $_SESSION jest dostępne globalnie. Oto fragment kodu:
PHP:
session_start();

...

class uzytkownik
	{
		public function logowanie($login,$pass)
		{
			$baza = new baza();
			$baza->zapytanie("select login,pass from users where login='".$login."' and pass='".$pass."'");
			if($baza->fetch_row() == 1)
			{
				$_SESSION["user"] = $baza->rows[0];
				header("Location: ?status=zalogowany");
			}//end if
			else
			{
				echo "Podałeś niepoprawne dane".$login." - ".$pass;
			}//end else
		}//end logowanie()
		
		public function wyloguj()
		{
			session_destroy();
		}
	}
	
	switch($_GET["status"])
	{
		case "sprawdzenie":
                                  $user = new uzytkownik; // <- TO
			$user -> logowanie($_POST["login"],$_POST["pass"]);
			break;
		case "zalogowany":
			echo $_SESSION["user"]."<br />";
			break;
		default: echo "Nieprzewidziane zdarzenia";
	}//end switch

Jeśli przeniesiemy 'TO' przed switch to wszystko działa nie wiem tylko czemu, $_SESSION posiada taki zasięg jak obiekt który go tworzy?
 

loganek

Były Moderator
Dołączył
Listopad 11, 2006
Posty
563
hmm, trochę przerobiłem twój kod aby u mnie działał(wywaliłem baze danych, ale to nie ma znaczenia), i wszystko jest ok. Wyświetla :
loganek
loganek
PHP:
<?php
session_start();

class uzytkownik
    {
        public function logowanie($login,$pass)
        {
            /*$baza = new baza();
            $baza->zapytanie("select login,pass from users where login='".$login."' and pass='".$pass."'");
            if($baza->fetch_row() == 1)*/
            {
                $_SESSION["user"] = 'loganek';
                header("Location: ?status=zalogowany");
            }//end if
           // else
            {
                echo "Podałeś niepoprawne dane".$login." - ".$pass;
            }//end else
        }//end logowanie()
        
        public function wyloguj()
        {
            session_destroy();
        }
    }
    
    switch($_GET["status"])
    {
        case "sprawdzenie":
                                  $user = new uzytkownik; // <- TO
            $user -> logowanie('a','b');
            break;
        case "zalogowany":
            echo $_SESSION["user"]."<br />";
            break;
        default: echo "Nieprzewidziane zdarzenia";
    }//end switch 
echo $_SESSION['user'];
?>
nie wiem w czym może być twój problem, może wadliwa konfiguracja, ale nie sądze zeby można bylo ustawiać to, czy session jest globalne czy nie.
 
Do góry Bottom