объект в сессии

seeker

Guest
объект в сессии

при использовании session_register, когда пытаешся использовать объект, то его почему- то нужно сначала сериализовать, потом десериализоваоть, иначе доступа к полям объекта почемуто нету. Интерестно в чём дело и что делать?
_________________________
object.php
<?php
class myclass{
var $field;
function myclass($field){
$this->field = $field;
}
}
?>
___________________________
page1.php
<?php
session_register("object");
include_once 'object.php';
$object = new myclass('value of object field');
echo "<script language=javascript>location.href='page2.php';</script>";
?>
____________________________
page2.php
<?php
session_start();
include_once 'object.php';

//без етой строки почему-то не работает
$object=unserialize(serialize($object));

echo $object->field;
?>
_______________________________

интерестна реализация именно с помощью session_register.
 

tony2001

TeaM PHPClub
инклуд определения класса должен быть ДО session_start, иначе ты получаешь объект класса "__PHP_Incomplete_Class".
 

seeker

Guest
важно передать именно ОБЪЕКТ. и чтоб НЕ приходилось его десерриализовывать

-~{}~ 14.02.05 12:27:

Автор оригинала: tony2001
инклуд определения класса должен быть ДО session_start, иначе ты получаешь объект класса "__PHP_Incomplete_Class".
Тогда конечно работает, но пишет такую фигню:
Warning: session_start() [function.session-start.html]: Cannot send session cookie - headers already sent by (output started at c:\root\docs\1\object.php:11) in c:\root\docs\1\page2.php on line 4
 

Фанат

oncle terrible
Команда форума
tony2001
Хм, это точно?
А в чем суть? Почему именно так? почему играет роль момент старта сессии, а не момень помещения переменной в неё?
 

tony2001

TeaM PHPClub
Фанат
я имею ввиду не помещение (тут безразлично), а "изьятие" из сессии.
т.е. если у тебя лежит в сессии (или просто в сериализованных данных) объект класса N, но сам класс N - не объявлен, то как по-твоему РНР должен его десериализовать?

-~{}~ 14.02.05 13:06:

seeker
пробелы убери в object.php
 

Panchous

Павел
Автор оригинала: tony2001
инклуд определения класса должен быть ДО session_start, иначе ты получаешь объект класса "__PHP_Incomplete_Class".
а почему именно до session_start, не до десериализации?
(ведь в сессии хранится просто строка, как я понимаю)
In order to be able to unserialize() an object, the class of that object needs to be defined.
Serializing objects - objects in sessions
 

Panchous

Павел
Фанат, так можно народ запутать
разве session_start имеет отношение к десериализации?
 

tony2001

TeaM PHPClub
Panchous
непосредственное.
при session_start() сессия десериализуется.
session_register() неявно вызывает session_start() (если она ранее не была вызвана).
 

Фанат

oncle terrible
Команда форума
Panchous
не имеет?
а как она тогда, по-твоему, достает объект из файла, в котором хранится "просто строка"?
 

seeker

Guest
seeker
пробелы убери в object.php
ВСЕМ СПАСИБО. ЗАРАБОТАЛО!!!
Действительно нужно включить файл с определеним класса до ывзова сессии и внимательно следить за тем, чтобы в нём не было пробелов.
 
Сверху