[php] Welk formaat is $_SESSION

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 14-09 21:45
Ik probeer te achterhalen in welk formaat $_SESSION zijn data doorgeeft aan write(id, sess_data), een custom session handler voor php.

ALs ik dit doe:

PHP:
1
2
3
4
session_start();
$_SESSION['session_logged_in'] = 1;
$_SESSION['gebruikersnaam'] = "maarten";
$_SESSION['session_user_id'] = 3;


en in de session handler:

PHP:
1
2
3
function write($id,$sess_data) {
  print "sess_data = ".$sess_data;
}


Dan krijg ik deze string:
session_logged_in|i:1;gebruikersnaam|s:7:"maarten";session_user_id|i:3;


Ik sla mijn session variabelen appart op in verschillende database velden, dus ik moet in de read functie de data uit de db weer in hetzelfde formaat hebben als write het wil hebben. Ik zie echter niet in, welk formaat dit is??

Ik blijf er iig vrij nuchter onder....


Acties:
  • 0 Henk 'm!

  • mr.inno
  • Registratie: April 2003
  • Laatst online: 14-09 18:19
warom zou je het formaat willen weten.. of het string of int of zo wat is?

inno


Acties:
  • 0 Henk 'm!

  • PhoneTech
  • Registratie: Mei 2000
  • Laatst online: 17-09 12:53
var_dump($_SESSION['naampje']);

Acties:
  • 0 Henk 'm!

  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 14-09 21:45
hmm, ik wordt niet goed begrepen, misschien wat verduidelijking nodig:

Mijn custom session handler, schrijft niet de gehele sess_data weg naar 1 veld, maar splitst dit, voert het in verschillende velden in.

Het probleem is nu, dat ik bij het in- en uitlezen van de data moet proberen het weer in het volgende formaat te krijgen, zodat ik het weer met de $_SESSION kan gebruiken:

session_logged_in|i:1;gebruikersnaam|s:7:"maarten";session_user_id|i:3;


Ik wil dus eigenlijk weten hoe ik van de bovenstaande string naar een array() ga, en andersom.

Ik dacht eerst met serialize(), maar die zet het in een ander formaat, namelijk zoiets:
a:2:{s:10:"session_id";s:32:"0452c50027bbd749f400455340b07879";s:15:"session_user_id";s:1:"0";}

[ Voor 9% gewijzigd door maartenvdv737 op 14-09-2003 12:32 ]

Ik blijf er iig vrij nuchter onder....


Acties:
  • 0 Henk 'm!

  • KillR-B
  • Registratie: Mei 2002
  • Laatst online: 09-09 09:55
Wat jij wilt, doet deze de functie unserialize()

Die string die jij terug krijgt kun je in feite gewoon ontleden (wat unserialize dus doet)
  • session_logged_in|i:1;
    betekend $session_logged_in van het type Integer met waarde 1
  • gebruikersnaam|s:7:"maarten";
    betekend $gebruikersnaam van het type String met waarde "maarten"
enz..

Acties:
  • 0 Henk 'm!

  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 14-09 21:45
KillR-B, ja dat dacht ik dus ook, maar het werkt niet goed...

print_r(unserialize('session_logged_in|i:1;gebruikersnaam|s:7:"maarten";session_user_id|i:3;'));

Geeft niets terug...

Ik blijf er iig vrij nuchter onder....


Acties:
  • 0 Henk 'm!

Verwijderd

Deze simpele dingen kun je zelf ook wel ontcijferen. Als ik er zo naar kijke is het formaat:
code:
1
variabele naam|type:waarde;
en dat meerdere malen achter elkaar. waar type dus 'i' of 's' kan zijn (int of string), waarschijnlijk zijn er meer mogelijkheden maar dat kan ik hier niet direct uithalen.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Waarom wil je met de hand de $_SESSION zetten? Die data string moet je toch gewoon retourneren in je session read handler? Dan maakt php daar weer een $_SESSION variabele van

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Ik denk dat als je echt een dergelijke custom-sessies wilt, dat je dan beter compleet van de session-manager van PHP kunt afstappen.

Gewoon zelf een cookie met een goede levensduur zetten en zelf de waarden in een of andere sessie-object/array bijhouden.

Misschien niet zo makkelijk als php's sessie-functies gebruiken, maar imho wel mooier als je speciale eisen eraan hebt :)
Verwijderd schreef op 14 September 2003 @ 13:16:
Deze simpele dingen kun je zelf ook wel ontcijferen. Als ik er zo naar kijke is het formaat:
code:
1
variabele naam|type:waarde;
en dat meerdere malen achter elkaar. waar type dus 'i' of 's' kan zijn (int of string), waarschijnlijk zijn er meer mogelijkheden maar dat kan ik hier niet direct uithalen.
En bij een string is het eerst de grootte en dan de waarde.

Maar ik gok dat het met objecten lastiger wordt om dat terug te decoden ;)

[ Voor 42% gewijzigd door ACM op 14-09-2003 14:15 ]


Acties:
  • 0 Henk 'm!

Verwijderd

ACM schreef op 14 September 2003 @ 14:13:
Maar ik gok dat het met objecten lastiger wordt om dat terug te decoden ;)
Het is maar net waar je tijd in wilt steken :P ;)

Acties:
  • 0 Henk 'm!

  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 14-09 21:45
Ligt het aan mij, of doet session_register() andere dingen met de session_string dan $_SESSION ?

Ik probeer hier dus met register_globals = off te programmeren, maar het levert me alleen maar problemen op...

Ik blijf er iig vrij nuchter onder....


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Nee, dat doet er niks anders mee, lijkt mij, je moet ze alleen niet door elkaar aan lopen gebruiken, want dan schijnt het wel mis te gaan.

[ Voor 8% gewijzigd door ACM op 14-09-2003 15:54 ]


Acties:
  • 0 Henk 'm!

  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 14-09 21:45
Nou goed, ik heb het eindelijk voor elkaar met $_SESSION. Ik maak een object aan, en dat registreer ik dan met: $_SESSION['object_naam'] = $object;

Zo kan ik met serialize en unserialize de data splitsen en weer samenvoegen en zo de data in apparte velden in de database invoeren.

Dit nog steeds met php sessions.

Ik blijf er iig vrij nuchter onder....


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

maartenvdv schreef op 14 september 2003 @ 16:04:
Nou goed, ik heb het eindelijk voor elkaar met $_SESSION. Ik maak een object aan, en dat registreer ik dan met: $_SESSION['object_naam'] = $object;

Zo kan ik met serialize en unserialize de data splitsen en weer samenvoegen en zo de data in apparte velden in de database invoeren.

Dit nog steeds met php sessions.
[rml].oisyn in "[ php] Welk formaat is $_SESSION"[/rml]
ik sla mijn sessions gewoon in een mysql db op, en het werkt prima, zonder moeilijk te doen met allerlei ingewikkelde kapriolen

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 14-09 21:45
Ik heb het al redelijk vaak gezegd: Ik wil mijn session variabelen in apparte velden in de database opslaan, niet in 1 veld....

Ik blijf er iig vrij nuchter onder....


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dan sla je de hele string toch gewoon ook op?
.edit: dat scheelt je ook een database modificatie als je ineens ergens toevallig nog een session variabele op wilt slaan

[ Voor 55% gewijzigd door .oisyn op 14-09-2003 17:09 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 14-09 21:45
Dan moet ik em nog steeds splitsen, want die losse velden moeten wel aangepast worden.

Ik blijf er iig vrij nuchter onder....


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Maar waarom blijf je dan zo krampachtig aan php's sessie-systeem vasthouden, als je het wilt afbeelden op een eigen database :?

Schop heel dat session_* en $_SESSION gedoe eruit en je kan je eigen sessie-management-systeem maken. En dat is misschien nog wel minder werk ook dan die van php...
't Enige wat je nu nog gebruikt van php zijn die functie-calls, de array en de cookies.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

maartenvdv schreef op 14 September 2003 @ 17:24:
Dan moet ik em nog steeds splitsen, want die losse velden moeten wel aangepast worden.
daar heb je toch nog steeds gewoon $_SESSION voor?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 14-09 21:45
ACM, ik moet ook nog de SID overal gaan doorgeven als de gebruiker cookies uit heeft staan.

Ik blijf er iig vrij nuchter onder....


Acties:
  • 0 Henk 'm!

  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 14-09 21:45
Kan het kloppen dat Custom sessions een enorme aanslag op de database is?

Ik heb deze sessionHandler geschreven, maar onze site klapt er steeds uit, hoogst waarschijnlijk door de mysql processen.

http://81.23.233.21/sessionHandler.phps

Of ziet iemand een inconsistentie

Ik blijf er iig vrij nuchter onder....

Pagina: 1