serialize a unserialize objektů

pokud provedu serializaci objektu, stvoří se takový podivný řetězec, který uložím do session.
Když lokálně provedu unsrialize, tak objekt v pohodě funguje. Objekt je předem inicializovaný.
Pokud to neprovedu lokálně, tedy na serveru, kde to má běžet, tak to nefunguje. Ale mám pocit, že už to jednou chodilo (dohad).
Kde může být problém?
Mám pocit, že se unserialize neprovede a přemázne to nějakou hodnotou už inicializovaný objekt. Navíc mi záhadně zmizí i ta hodnota serializovahého objektu ze session.
Určitě dělám chybu já, ale nevím kde. Na jednom místě to funguje bez problémů, na druhém ani za boha...
zdrojáky jsou dost obsáhlé, tak pokud budu hodně zoufalý, tak vyrobím nějakou zkráceninu.
Díky.
skontroluj si ako mas nastavene session na serveri a ako doma a ci su rovnako konfigurovane. podla toho co tu pises chyba moze byt v sessions.
session sa nejakym sposobom prerusia a zanikne ti stare pole $_SESSION a pritom ssa vytvori nove. preto sa zda ze sa ti stara hodnota zo session stratila.
char0n, to asi ne, vyrobil jsem testovací prográmek, který zobrazoval sessions. Tam je všechno v pohodě. Chyba je jinde. Na to asi nemůžete dojít, ale jakmile to rozlousknu, tak to napíšu.
Tak za to může unserialize.

mám:

$_SESSION['cosi'] = serialize($prom_objekt);

...

tim se jako zaloguje, OK.
pak, pokud je nastavene session['cosi'] provedu:

$prom_objekt = unserialize($_SESSION['cosi']);

s tim, ze $prom_objekt je inicializovany (zbytecne).

lokalne mi to chodilo, protoze session obsahovalo presne ten retezec, ktery jsem potreboval.
externe to nechodilo, protoze je tam nekde nastavene, ze kdyz to rozpozna objekt, tak to vrati objekt. Bylo by to ok v pripade, kdyby nevratil neco, co oznacil za __PHP_Incomplete_Class. Tudiz nefunkcni.
Jeste se v navodu hovori o tom, ze si muzeme napsat "unserialize_callback_func", ktera tohle resi, no....

Tak si tu serializaci udelam po svem.

No chutovka...
Jeste kdyby to nekoho zajimalo, tady jsou obecne metody k serializaci objektu:

function my_serialize() {
$aa = array();
foreach ( $this as $k=>$v ) {
$aa[$k] = $v;
}
return serialize($aa);
}

function my_unserialize($s) {
$aa = unserialize($s);
foreach ( $aa as $k => $v ) {
$this->{$k} = $v;
}
}
..pořád mám takový pocit, že problém je někde úplně jinde....
vysvetli aspon o jaky objekt ide. ci ide o databazovy odjekt alebo nieco ine. lebo dal si prilis malo detailov aby sme ti nohly pomoct
jestli vám to pomůže:
<?php
/ v podstate odpovida tabulce uzivatel
* ale obsahuje jen udaje, ktere se potrebuji casto + prava z tabulky prav
*/
class uzivatel { # {{{
var $uzivatel_id;
var $jmeno;
var $prijmeni;
var $nick;
var $login;
var $ikonka;
var $prava=array(); # seznam prav, textove

function uzivatel() {
$this->login = '';
}

function is_logged() {
return $this->login != '';
}

/
vyhodnoceni prav
* Pravo je ve tvaru sekce/klan/pravo, pokud je nektera z hodnot sekce n. klan 'null' plati pravo pro vsechny sekce, klany
* @param $pravo aktualni sekce/klan/potrebne pravo na to, aby byl povolen pristup
* @return true, kdyz ma uzivatel dostatecna prava, false, pokud je nema
*/
function has_permition($pravo) { # {{{
if ( $pravo == 'null/null/null' ) {
return true;
} else {
list($s, $k, $p) = split('/', $pravo);
$r = false;
reset($this->prava);
while ( (list($key, $val) = each($this->prava)) && !$r ) {
list($my_s, $my_k, $my_p) = split('/', $val);
$r_s = ($s==$my_s || $s=='null' || $my_s=='null');
$r_k = ($k==$my_k || $k=='null' || $my_k=='null');
$r_p = ($p==$my_p || $p=='null' || $my_p=='null');

$r = $r_s && $r_k && $r_p;
}
return $r;
}
} # }}}

function my_serialize() {
$aa = array();
foreach ( $this as $k=>$v ) {
$aa[$k] = $v;
}
return serialize($aa);
}

function my_unserialize($s) {
$aa = unserialize($s);
foreach ( $aa as $k => $v ) {
$this->{$k} = $v;
}
}
} # }}}
?>

ale obávám, se že v objektu problém není. Problém je v práci se session.
Včera jsem provedl ještě pár pokusů a problém je v podivném chování session['uzivatel'], mění se mi pod rukama...
takze pozrel som sa tvoj objekt a jedna vec ma zarazila. tie funkcie na binarnu serializaciu tvojho objektu. serializovat objekt znamena zapisat jeho binarnu podobu vratane socketov a vsetkeho co obsahuje. potom mozes tento serializovany objekt prenasat napriklad pomocou sessions.

$temp_object = new uzivatel();

//operacie s objektom

$ser_temp_objekt = serialize($temp_object);

$_SESSION['user'] = $ser_temp_objekt;

musis serializovat celu instanciu objektu
skus to urobit takto
ked ti toto nepojde tak sa vzdavam
chyba musi byt potom niekde v tvojom kode

tiez si poriadne precitaj notes k tejto funkcii
je tam plno prikladov
dufam ze toto ti pomoze\

http://cz2.php.net/serialize
Manual jsem cetl 8x, vim ze serialize je neco jineho, nez jsme napsal, ale na tom serveru mi to proste nechodi a doma jo... Nevim...
kamo
ja ti uz viac pomoct nefiem
sorac
niekde v kode musi byt chyba
zapni si error_reporting
alebo si zozen debugger

viac ti uz pomoct nefie
tak jsem došel na chybu. Problém je v tom, že doma jsem měl register_globals = off a na venku, kde to nechodilo je register_globals=on
v globals se pak objevila proměnná $uzivatel. Tu jsem dál tvořil jako objekt, ale pak byla přeplácnutá proměnnou uzivatel, která vznikla ze session[uzivatel], takže jsem přejmenoval session (cesta nejméně změn) a začalo to fungovat. Pochopitelně je my_serialize() a my_unserialize() kničemu.
Z toho plyne poučení, bacha na register_globals=on
a
register_globals=off rulezzz!
škoda, že to tak na 99,9% serverů není....