Witam!
Mam pewien problem z sesjami. W php piszę juz jakiś czas, logowanie zrobiłem niejedno,
ale błąd, na który natknąłem się wczoraj najzwyczajniej mnie położył :(
Mam taki kod:
<?php
$logged=false; // stan użytkownia (zalogowany/wylogowany)
if(isset($_POST['username'])&&isset
($_POST['userpass'])) { // sprawdzam, czy jest żądanie logowania $a=$core->auth->login($_POST['username'],$_POST['userpass']); // loguje
if($a) {
$logged=true; // zmieniam stan zalogowania
}
$_SESSION['logged']=$a; // przekazuje ID usera do sesji
}
?>
auth::login wygląda tak:
<?php
function login($user=NULL,$pass=NULL) {
if($user===NULL&&$pass===NULL) { //brak danych logowania - staram się "autologować"
if(isset($_SESSION['logged'])) { $this->logged=$_SESSION['logged'];
} else {
$this->logged=false;
$_SESSION['logged']=false;
}
} else { // loguje po danych użytkownika
$this->logged=$this->core->users->auth($user,$pass);
}
// ustawiam dane usera
$this->core->currentUser=$this->core->users->setCurrentUser($this->logged);
return($this->logged);
}
?>
I ten kod działa. Problem pojawia się w momencie, kiedy przypisania wartości do $_SESSION chcę przenieść do metody auth::login (bo po co ma to być w kodzie strony, skoro z tego korzysta tylko klasa auth).
Po przeniesieniu kod wygląda tak:
<?php
$logged=false; // stan użytkownia (zalogowany/wylogowany)
if(isset($_POST['username'])&&isset
($_POST['userpass'])) { // sprawdzam, czy jest żądanie logowania if($core->auth->login($_POST['username'],$_POST['userpass'])) { // loguje
$logged=true; // zmieniam stan zalogowania
}
}
?>
auth::login
<?php
function login($user=NULL,$pass=NULL) {
if($user===NULL&&$pass===NULL) { //brak danych logowania - staram się "autologować"
if(isset($_SESSION['logged'])) { $this->logged=$_SESSION['logged'];
} else {
$this->logged=false;
$_SESSION['logged']=false;
}
} else { // loguje po danych użytkownika
$this->logged=$this->core->users->auth($user,$pass);
$_SESSION['logged']=$this->logged;
}
// ustawiam dane usera
$this->core->currentUser=$this->core->users->setCurrentUser($this->logged);
return($this->logged);
}
?>
Jednak faktyczna wartość sesji widoczna jest tylko wewnątrz metody. Poza nią - $_SESSION['logged'] przyjmuje wartość 0/1.
Czy ktoś spotkał się z podobnym problemem? Co moze być przyczyną? Jak moznaby to rozwiązać?
Korzystam z php w wersji 4.4.4 (nowy lepszy szatan ;) ).
Z góry dziękuję za pomoc
Pozdrawiam