[php] Formaat van sessie-data

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik gebruik een database om m'n sessiedata in op te slaan, en wil deze uit kunnen lezen. Ik dacht dat de data in de array $_SESSION dmv de functie serialize() in een string werd geconverteerd, en vervolgens werd opgeslagen. Dit blijkt niet zo te zijn:

Als ik dit doe:
PHP:
1
2
$var = array("bla",12); 
$_SESSION['var'] = $var;


Dan wordt dit opgeslagen:
code:
1
var|a:2:{i:0;s:3:"bla";i:1;i:12;}

Dit geeft false terug bij unserialize()

En dit geeft serialize($_SESSION) terug:
code:
1
a:1:{s:3:"var";a:2:{i:0;s:3:"bla";i:1;i:12;}}


Waarom dit verschil? Maar belangrijker: Hoe kan ik de opgeslagen string naar een variabele converteren?

Acties:
  • 0 Henk 'm!

  • AaroN
  • Registratie: Februari 2001
  • Laatst online: 16-08-2023

AaroN

JayGTeam (213177)

Wat is dan de code om die $_SESSION op te slaan in je database? Hoe kom je nou aan:
code:
1
var|a:2:{i:0;s:3:"bla";i:1;i:12;}
?

Er zal wel iets fout gaan bij het in de database stoppen, daar de bovenste string slechts het laatste deel is van de string die hoort en tevens die | is er tussen gekomen.

[ Voor 42% gewijzigd door AaroN op 17-11-2003 20:07 ]

JayGTeam (213177)


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
AaroN schreef op 17 november 2003 @ 20:06:
Wat is dan de code om die $_SESSION op te slaan in je database? Hoe kom je nou aan:
code:
1
var|a:2:{i:0;s:3:"bla";i:1;i:12;}
?
Die string wordt door php zelf aangeleverd, die maak je niet zelf. Het is hetzelfde formaat als gewone sessies trouwens, dus dat doet eigenlijk niet terzake...

[ Voor 31% gewijzigd door Verwijderd op 18-11-2003 11:23 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Lucas,

code:
1
2
    $s = 'a:2:{i:0;s:3:"bla";i:1;i:12;}';
    print_r(unserialize($s));


geeft dit:

code:
1
Array ( [0] => bla [1] => 12 )


Maar jij hebt dit:

code:
1
var|a:2:{i:0;s:3:"bla";i:1;i:12;}


Het verschil is dat dit geen serialized string is maar een session-coded string.

Deze kun je verkrijgen via session_encode() en parsen via session_decode()

[ Voor 58% gewijzigd door Verwijderd op 18-11-2003 13:57 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Floris,

dat is verder niets nieuws. Die functies hebben alleen betrekking op de sessie van de gebruiker, en bieden dus niet de mogelijkheid een willekeurige string te decoden of een willekeurige variabele te encoden, wat wel de bedoeling is.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Heb je al gekeken naar session_set_save_handler? Volgens mij is dat precies wat je nodig hebt ;)

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!

Verwijderd

Topicstarter
Janoz schreef op 19 november 2003 @ 09:48:
Heb je al gekeken naar session_set_save_handler? Volgens mij is dat precies wat je nodig hebt ;)
Dat gebruik ik dus ook ;)
PHP:
1
2
function write( $id, $data ){
}

Dit is de write functie die aangeroepen wordt als er een sessie (over)schreven moet worden. Zoals je ziet wordt $data door php aangeleverd en heb ik geen invloed op het formaat daarvan. Daarom zoek ik iets om die string te ontleden/decoden. Optie om dit probleempje te omzeilen is zelf een session handler schrijven, maar dat gaat me op dit moment wat te ver...
Pagina: 1