Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Obiekty][Sesje] Przekazywanie obiektu w sesji.
Forum PHP.pl > Forum > PHP
thornag
Witam mam maly problem z przekazaniem obiektu w sesji.

Do testow uzywam nastepujacego kodu
  1. <?php
  2.  
  3. require("db.class.php5");
  4.  
  5. if(!isset($_SESSION['s'])) {
  6. echo "nowy obiekt<br>";
  7. $_SESSION['s'] = New DB();
  8. } 
  9.  
  10. $s = unserialize($_SESSION['s']);
  11. $s->query("SELECT * FROM visits");
  12. echo "pobrane";
  13.  
  14. ?>


Pierwsze odswiezenie daje spodziewane rezultaty. Na ekranie widnieje napis nowy obiekt i pobrano.

Po odswiezeniu strony kiedy sesja jest juz zarejestrowana wystepuje :
Kod
Fatal error: Call to a member function query() on a non-object in /var/www/vhosts/myooch_test/1.php5 on line 12


Wczesniej wystepowaly tez bledy o serializacji. Przy kodzie :
  1. <?php
  2.  
  3. require("stat/db.class.php5");
  4.  
  5. if(!isset($_SESSION['s'])) {
  6. echo "nowy obiekt<br>";
  7. $_SESSION['s'] = New DB();
  8. } 
  9.  
  10. $_SESSION['s']->query("SELECT * FROM visits");
  11.  
  12. echo "pobrane";
  13.  
  14. ?>


Przy powyzszym kodzie mamy blad:
Kod
Fatal error: main() [<a href='function.main'>function.main</a>]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition &quot;DB&quot; of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in /var/www/vhosts/myooch_test/1.php5 on line 11


Kombinowalem z serializacja niestety nie pomagalo. Co do definicji klasy i sugesti przeciazenia funkcji __autoload, to przeciez definicja jest zaladowana komenda require (chyba ze zle pojmuje kwestie zaladowania definicji).

Jak przekazac obiekt w sesji?

P.S. probowalem przeszukac forum, na keywordy "przekazywanie obiektu w sesji" forum reaguje czerwonym ostrzezeniem ze szukana fraza jest za krotka albo uwywam niedozwolonych slow.
legorek
  1. <?php
  2. $_SESSION['s'] = New DB();
  3. ?>


To Twój błąd. W ten sposób $_SESSION['s'] jest obiektem, który ty potem traktujesz unserialize.
nospor
http://pl.php.net/manual/pl/language.oop.serialization.php
I mi to jakos dziala winksmiley.jpg
Uzywam serializacji przy cacheowaniu obiektow
thornag
Zmienilem jak stalo w manualu

  1. <?php
  2.  
  3. require("stat/db.class.php5");
  4.  
  5. if(!isset($_SESSION['s'])) {
  6. echo "nowy obiekt<br>";
  7. $db = New DB();
  8. $_SESSION['s'] = serialize($db);
  9.  
  10. } 
  11.  
  12.  
  13.  
  14.  $a = unserialize($_SESSION['s']);
  15.  
  16.  $a->query("SELECT * FROM visits");
  17.  
  18.  
  19. ?>


Efekt
Kod
Fatal error: Call to a member function query() on a non-object in /var/www/vhosts/myooch_test/1.php5 on line 17


Pokusilem sie nawet o implode, wtedy zostalem powiadomiony o zlych parametrach dla implode. Wszak po co mi tak impolode ?

Probowalem tez wyprintowac unserialized($_SESSION['s']);

Zobaczylem(badz nie) pusty struing.

VarDump pokazal bool(false)
nospor
A wyczysciles se sesje od ostatnich prob? Moze masz smieci przez to smile.gif Bo ty do sesji walisz jesli nie ma s w sesji.
thornag
@nospor dwa slowa => No tak.


Dzieki za pomoc.
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.