Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: znikajace obiekty uzywane w sesji po przejsciu na nowa strone
Forum PHP.pl > Forum > PHP
Mr Groch
Witam

Taki kod:

plik1
  1. require('config_class.php');
  2.  
  3. session_start(); // start sesji
  4.  
  5. if (isset($_SESSION['osoba']))
  6. {
  7. $osoba = $_SESSION['osoba'];
  8. $zalogowany = 1;
  9. }
  10. else $zalogowany = 0;
  11.  
  12. // logowanie usera
  13. if ($_POST["loged"] == "1")
  14. {
  15. $osoba = new Osoba();
  16. if ($osoba->spr_login())
  17. { // udane logowanie
  18. $osoba->load_osoba();
  19. $_SESSION['osoba'] = $osoba;
  20. $zalogowany = 1;
  21. }
  22. else
  23. { // nieudane logowanie
  24. $zalogowany = -1;
  25. }
  26. }


plik2:
  1. require('config_class.php');
  2.  
  3. session_start(); // start sesji
  4.  
  5. if (isset($_SESSION['osoba']))
  6. {
  7. $osoba= $_SESSION['osoba'];
  8. $zalogowany = 1;
  9. }
  10. else $zalogowany = 0;


Po zalogowaniu sie w plik1 osoba jest zapamietywana, niewazne ile razy odswieze strone, itd. Po przejsciu na plik2, osoba jest widoczna tylko za pierwszym razem, po odswiezeniu strony lub po powrocie na plik1 osoba jest juz pusta... Nie ma, zostal tylko slad w $_sessions - [osoba] => (tu jest nic smile.gif

Ktos pomoze dojsc do tego w czym problem?
Zyx
Widocznie gdzieś w kodzie plik2.php masz kawałek, który tę zmienną sesji czyści i z jakiegoś powodu jest on wykonywany.
Mr Groch
No wlasnie nie, tez tego szukalem bo wydawalo mnie sie ze to moze byc powod... W jedynym miejscu gdzie to sie dzieje dawalem do debugu echo 'sesja usuwana' i nigdy tam nie wlazil nieproszony... Dla jasnosci dam caly listing, pomijajac kawalki z html (tam zadne zmienne nie sa zmieniane, itp). Rozni sie nieco od wczesniejszego, bo zaczalem implementowac dalsza funkcjonalnosc, jednakze problem z tematu jak najbardziej aktualny, czyli tam gdzie sprawdza osobe, po odswiezeniu strony osoba jest pusta...

plik2
  1. <?php
  2.  
  3. // tj plik naglowkowy klas
  4. require('config_class.php');
  5.  
  6. session_start(); // start sesji
  7.  
  8. if (isset($_SESSION['uczestnik']))
  9. {
  10. $uczestnik = $_SESSION['uczestnik'];
  11. $zalogowany = 1;
  12. }
  13. else $zalogowany = 0;
  14.  
  15. if (isset($_SESSION['osoba']) && !(isset($_SESSION['uczestnik'])))
  16. {
  17. $uczestnik = new Uczestnik();
  18. $_SESSION['uczestnik'] = $uczestnik;
  19. $zalogowany = 1;
  20. }
  21.  
  22. // wylogowanie usera
  23. if ($_POST["logout"] == "1")
  24. {
  25. $_SESSION = array();
  26. unset($osoba);
  27. unset($uczestnik);
  28. $zalogowany = 0;
  29. }
  30.  
  31. $db_no_close = 0;
  32. require('config_end.php');


PS. Na tym samym serwerze stoi phpbb i tam nie zauwazylem jakichs problemow z sesjami...
tehaha
sesje same nie znikają daj w kodzie co jakiś kawałek print_r($_SESSION) i zlokalizuj miejsce w którym tracisz zmienne w sesji
Mr Groch
zaraz sprawdze dokladnie jak piszesz, wczesniej walnalem tego print_r na poczatku kazdego pliku, wnisoki takie:

plik1 - po odswiezeniu osoba zostaje
plik 2 - po wejsciu mamy tylko osobe (print_r na poczatku wiec jeszcze nie stworzony), po odswiezeniu osobe widac jako pusta [osoba] => ale mamy uczestnika
powrot do plik1 - nie ma osoby ale uczestnika pamieta za kazdym odwiezeniem
Crozin
Na początek upewnij się, że masz włączone raportowanie wszystkich błędów (display_errors => on, error_reporting => -1).
Teraz będziesz musiał spróbować napisać maksymalnie krótki i prosty kod, pozbawiony zależności do innych części projektu (albo dołączysz te zależności) w którym występuje ten błąd. Tak byśmy mogli go skopiować i uruchomić - chodzi o to by był dostępny cały kod.
Mr Groch
PS. Uczestnik dziedziczy po osobie, wydaje mnie sie absurdalne, by to powodowaly problemy, ale moze jednak?
kadlub
u mnie też znikały bo przed
session_start() miałem jakiś kod
spróbuj dać session start na początku każdego pliku tak żeby był pierwszą linijką tego pliku
może pomoże
pozdrawiam
Mr Groch
Cytat(kadlub @ 21.01.2011, 12:48:19 ) *
u mnie też znikały bo przed
session_start() miałem jakiś kod
spróbuj dać session start na początku każdego pliku tak żeby był pierwszą linijką tego pliku
może pomoże
pozdrawiam


Niestety, to nie pomaga... Nawet wiecej psuje, bo pojawia sie przy kazdym obiekcie w sesji incomplete class...
kalmaceta
czasem zapominane: definicja klasy, obiektu, który znajduje się w zmiennej $_SESSION musi być zadeklarowana przed session_start(). autoload pomoże.

może też błędnie implementowałeś __sleep() i __wakeup()
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.