Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Obiekt w sesji.
Forum PHP.pl > Forum > PHP
Milczar
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.
NuLL
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.
Milczar
I nie ma żadnego innego rozwiazania na to?
NuLL
Czy to co napisałem jest niezrozumiałe ?
Milczar
Jest zrozumiałe.
A moje pytanie jest niezrozumiałe?
Serializowanie wyglada troche sztucznie, bardziej naturalne byloby zapisywanie obiektu... ale ok.
dr_bonzo
A definicje klasy masz przed odserializowaniem (wczytaniem sesji -- session_start())?

Zapisanie sesji polega na serializacji tablicy $_SESSION i zapisania stringa w bazie czy pliku.
Milczar
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.
dr_bonzo
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.
Milczar
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!
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.