Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][sesje] problem z przekazaniem wartości
Forum PHP.pl > Forum > PHP
MiB
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:


  1. <?php
  2. $logged=false; // stan użytkownia (zalogowany/wylogowany)
  3. if(isset($_POST['username'])&&isset($_POST['userpass'])) { // sprawdzam, czy jest żądanie logowania
  4. $a=$core->auth->login($_POST['username'],$_POST['userpass']); // loguje
  5. if($a) {
  6. $logged=true; // zmieniam stan zalogowania
  7. }
  8. $_SESSION['logged']=$a; // przekazuje ID usera do sesji
  9. }
  10. ?>


auth::login wygląda tak:
  1. <?php
  2. function login($user=NULL,$pass=NULL) {
  3. if($user===NULL&&$pass===NULL) { //brak danych logowania - staram się "autologować"
  4. if(isset($_SESSION['logged'])) {
  5. $this->logged=$_SESSION['logged'];
  6. } else {
  7. $this->logged=false;
  8. $_SESSION['logged']=false;
  9. }
  10. } else { // loguje po danych użytkownika
  11. $this->logged=$this->core->users->auth($user,$pass);
  12. }
  13. // ustawiam dane usera
  14. $this->core->currentUser=$this->core->users->setCurrentUser($this->logged);
  15. return($this->logged);
  16. }
  17. ?>


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:

  1. <?php
  2. $logged=false; // stan użytkownia (zalogowany/wylogowany)
  3. if(isset($_POST['username'])&&isset($_POST['userpass'])) { // sprawdzam, czy jest żądanie logowania
  4. if($core->auth->login($_POST['username'],$_POST['userpass'])) { // loguje
  5. $logged=true; // zmieniam stan zalogowania
  6. }
  7. }
  8. ?>


auth::login
  1. <?php
  2. function login($user=NULL,$pass=NULL) {
  3. if($user===NULL&&$pass===NULL) { //brak danych logowania - staram się "autologować"
  4. if(isset($_SESSION['logged'])) {
  5. $this->logged=$_SESSION['logged'];
  6. } else {
  7. $this->logged=false;
  8. $_SESSION['logged']=false;
  9. }
  10. } else { // loguje po danych użytkownika
  11. $this->logged=$this->core->users->auth($user,$pass);
  12. $_SESSION['logged']=$this->logged;
  13. }
  14. // ustawiam dane usera
  15. $this->core->currentUser=$this->core->users->setCurrentUser($this->logged);
  16. return($this->logged);
  17. }
  18. ?>


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
nospor
jak na moj skromny gust to masz ustawione register_globals na on, i zmienna $logged nadpisuje ci sesje $_SESSION['logged']
ale moge sie mylic bo kodu za bardzo nie analizowalem smile.gif
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.