Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Obiekt w sesji., __PHP_Incomplete_Class_Name]
Milczar
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 13.12.2005

Ostrzeżenie: (0%)
-----


Witam.
Mam następujący problem - chcę umieścić obiekt klasy admin z polami LOGIN, MAIL, ID, TYPE, COMMENT w sesji.
Kod tworzacy i zapisujacy obiekt wyglada standardowo:

Kod
$newadmin = new admin($row['id'], $row['login'], $row['e_mail'], $row['type'], $row['comment']);
$_SESSION['user'] = $newadmin;
header("Location:index2.php");


Po przejsciu do index2.php wywolanie
Kod
print($_SESSION['user']->LOGIN);

nie daje zadnego rezultatu a wywolanie:
Kod
print_r($_SESSION);

wyświetla:

Array ( [user] => __PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => admin [ID] => 1 [LOGIN] => aaa [MAIL] => aaa@a [TYPE] => A [DESCR] => aaaaaaaa ) )

Ponoć jedną z metod rozwiązania tego jest zserializowanie obiektu przed zapisaniem go do $_SESSION.... i odserializowanie go po odczytaniu z $_SESSION... na innej stronie.
Czy zna ktoś jakies inne rozwiązanie? bez serializacji, żeby można bylo normalnie zapisywać w $_SESSION obiekt?

Z góry dzięki za odpowiedzi.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
NuLL
post
Post #2





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


Cytat
Ponoć jedną z metod rozwiązania tego jest zserializowanie obiektu przed zapisaniem go do $_SESSION.... i odserializowanie go po odczytaniu z $_SESSION... na innej stronie.

Wlasnie po to wymyslono serializacje.


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
Milczar
post
Post #3





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 13.12.2005

Ostrzeżenie: (0%)
-----


I nie ma żadnego innego rozwiazania na to?
Go to the top of the page
+Quote Post
NuLL
post
Post #4





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


Czy to co napisałem jest niezrozumiałe ?


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
Milczar
post
Post #5





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 13.12.2005

Ostrzeżenie: (0%)
-----


Jest zrozumiałe.
A moje pytanie jest niezrozumiałe?
Serializowanie wyglada troche sztucznie, bardziej naturalne byloby zapisywanie obiektu... ale ok.

Ten post edytował Milczar 13.12.2005, 15:21:51
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


A definicje klasy masz przed odserializowaniem (wczytaniem sesji -- session_start())?

Zapisanie sesji polega na serializacji tablicy $_SESSION i zapisania stringa w bazie czy pliku.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Milczar
post
Post #7





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 13.12.2005

Ostrzeżenie: (0%)
-----


Definicje klasy dołaczam z osobnego pliku (require_once)...
//otwieram sesje
session_start();
//dolaczam
regiure_once(......);

i pozniej sprawdzam min. czy w zeminnych sesyjnych $_SESSION jest moj obiekt.
i to wszystko jest ok - jest ustawiony, a odczytuje go takjak podalem na poczatku tematu.
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Definicje klasy musisz miec PRZED odczytem sesji.
Sesja jest odczytywana (wypelniana tablica $_SESSION) za pomoca session_start().

a
print_r( $_SESSION[ 'obiekt' ] ); to tylko skorzystanie z ODCZYTANEJ JUZ sesji.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Milczar
post
Post #9





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 13.12.2005

Ostrzeżenie: (0%)
-----


OK, dziala.
Najpierw dolaczylem plik z klasa, pozniej otworzylem sesje.
Bledow typu 'header already sent' pozbylem sie stosujac buforowanie...
czyli:
----------------------
<?php
ob_start();
require_once(...);
session_start();
ob_end_flush()
//i dalej caly kod z wykorzystaniem obiektu zapisanego w $_SESSION - dziala bez problemu.

?>
----------------------
Odwolania typu
print($_SESSION['user']->LOGIN);
$_SESSION['user']->test()
czy
print_r($_SESSION);
dzialaja prawidłowo.

Dzieki!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 05:19