PHP Session objecten verdwijnen bij 3de pagina?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • RTBravo
  • Registratie: April 2000
  • Laatst online: 10-09 19:00

RTBravo

Verkopen jullie ook jojn?

Topicstarter
Hee mensen,

Ik ben voor het eerst bezig met een OO PHP site. Ik heb een heel klein testje gemaakt waarmee ik een Object in een session zet door deze te serializen en op de 2de pagina te unserializen en uit te lezen. Dit werkt perfect, totdat ik de 2de pagina refresh, of naar een andere pagina ga, dan is het object gewoon leeg. Overal wordt het object geinclude en session_start() aangeroepen. Enig idee wat ik fout doe?

Als ik het overigens probeer met references (dus alleen references naar objecten in de session opsla) werkt het wel goed, die verdwijnen niet! Maar ik had op www.php.net gelezen dat hun voorkeur altijd uitgaat naar het serializen van object ipv met pointers te gaan werken omdat dit altijd sneller zou zijn? Volgens mij is werken met pointers sneller? Ook graag hierover jullie mening :)

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Laat eens een paar stukjes code zien. Probeer daarnaast eens je code tot een minimum uit te kleden en kijk dan of het probleem nog steeds optreed.

Ik heb het vermoeden dat het zou kunnen komen doordat op het moment dat session_start wordt aangeroepen nog niet bekend is hoe die class eruit zou moeten zien, oid.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • RTBravo
  • Registratie: April 2000
  • Laatst online: 10-09 19:00

RTBravo

Verkopen jullie ook jojn?

Topicstarter
het is al minimum, maar ik zal ff posten :)

test1.php
PHP:
1
2
3
4
5
6
7
<?
include("Order.php");
session_start();
$order=Order::giveOrder("1");
$_SESSION['order']=serialize($order);
?>
<a href="test2.php">klik hier</a>


test2.php
PHP:
1
2
3
4
5
6
<?
include("Order.php");
session_start();
$order=unserialize($_SESSION['order']);
echo $order->products[0]->packet->name;
?>


order.php is nogal groot object, dus ik zal jullie nie aandoen die hier te posten, maar elk object geeft hetzelfde probleem. De eerste x krijg ik dus net op pagina 2 de pakketnaam te zien en zodra ik em refresh of van die pagina af ga is $_SESSION['order'] leeg :s

Owjah, zoals je dus ziet include ik overal netjes eerst het object en dan pas de session_start;

[ Voor 29% gewijzigd door RTBravo op 27-10-2004 16:39 ]


Acties:
  • 0 Henk 'm!

  • TheBorg
  • Registratie: November 2002
  • Laatst online: 20-09 18:24

TheBorg

Resistance is futile.

Ik heb geen idee wat er in je "Order.php" staat, maar session_start(); mag best voor de include...

Acties:
  • 0 Henk 'm!

  • RTBravo
  • Registratie: April 2000
  • Laatst online: 10-09 19:00

RTBravo

Verkopen jullie ook jojn?

Topicstarter
Maakt nie uit welk object ik pak, de objecten zelf werken perfect, session wil alleen nie meewerken. Bovendien heb ik overal gelezen dat je EERST je objecten moet includen en dan pas de session mag starten.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Klopt, alhoewel dat in dit geval niet perse opgaat omdat voor de geserializde versie van het object niet perse de class definitie nodig is.

Waneer je je class rechtstreeks in je sessie zet moet je zelfs die include ervoor zetten omdat php anders niet weet hoe het object in de sessie eruit ziet.

Weet je trouwens wel zeker of het probleem aan je object ligt? Ik krijg namelijk het vermoeden dat het hier een probleem is juist met enkel je sessions. Misschien zelfs een config probleempje oid.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 14:52

crisp

Devver

Pixelated

staat register_globals aan? in dat geval ben ik bang dat je in regel 4 van test2.php je sessie-variabele overschrijft met je unserialized object...

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • RTBravo
  • Registratie: April 2000
  • Laatst online: 10-09 19:00

RTBravo

Verkopen jullie ook jojn?

Topicstarter
WTF, je hebt gelijk :D Als ik test2.php herschrijf naar dit
PHP:
1
2
3
4
5
6
<?
include("Order.php");
session_start(); 
$order2=unserialize($_SESSION['order']); 
echo $order2->products[0]->packet->name; 
?> 


Dan blijft ie wel leven! Wat fokking irritant is dat :P Ik moet dus de variabele waarin ik het unserialized object mik anders noemen dan de session variabele. Ik werk op een server die gehost wordt door iemand anders, dus ik had geen id dat dit bestond, op mijn server geen problemen hiermee namelijk. Zal standaard wel uitstaan dan.

Thnx iig, ik kan weer verder :)

[ Voor 8% gewijzigd door RTBravo op 28-10-2004 10:13 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 14:52

crisp

Devver

Pixelated

jep, met register_globals aan is $var dezelfde variabele als $_SESSION['var'] - wat op zich, als je er even over nadenkt, ook logisch is :)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
Btw, het object wordt sowieso geserialized in de sessie. Dus hem apart zelf serializen is nergens voor nodig en dus enkel dubbelop :)

Acties:
  • 0 Henk 'm!

  • RTBravo
  • Registratie: April 2000
  • Laatst online: 10-09 19:00

RTBravo

Verkopen jullie ook jojn?

Topicstarter
Jah dat laatste werkt wel bij een simpel object, maar bij objecten die zelf ook objecten bevatten werkt het totaal nie, dus ik serialize ze wel met de hand ;)
Pagina: 1