Door
Ozzie PHP
op 27-02-2014 00:18
gewijzigd op 27-02-2014 00:20
3.272 views
Ola,
Ik ben benieuwd hoe de meesten van jullie omgaan met gegevens uit de $_SESSION array.
Om deze gegevens te gebruiken, stop je ze vaak in een session(handler) class. Nu kun je hier op 2 manieren mee omgaan. Ik vraag me af hoe de meesten van jullie dat doen.
Manier 1:
Je hebt een session class en daar stop je de $_SESSION data in, bijv. $session = new Session($_SESSION). In de constructor zeg je dan $this->session_data = $session_data. Op het moment dat je iets uit de sessie wil halen doe je $session->get('foo'). Je spreekt dan dus de class property (de $session_data array) aan.
Manier 2:
Je maakt van iedere element in de $_SESSION array een apart object. Al deze objecten laad je vervolgens in in een session handler. Als je nu data wil ophalen, dan moet je dus eerst een apart session object ophalen $foo = $session_handler->get('foo'). Nu hebben we dus een object te pakken. Vervolgens halen we daar de value uit $foo->getValue(). Of, gewoon in 1x $foo = $session_handler->get('foo')->getValue().
Waarom maak je nu niet eens een Foo en een Bar die beide hun 'name' in de sessie willen opslaan? Dan weet je meteen waarom het niet werkt en kun je aan een oplossing sleutelen.
[offtopic]Het is dezer dagen wel erg "twee stappen vooruit en één achteruit". Of "Mens erger je niet": terug langs af. Ik snap waarom Wouter intensief linkt naar oude topics.[/offtopic]
Ward, laat maar, ik stel al 3 keer een andere vraag, en ik krijg telkens geen antwoord op m'n vraag. Ik snap dat je niet 2 dezelfde keys kunt opslaan in een array, maar daar gaat m'n vraag niet over. Maar goed, ik zal maar geen vragen meer stellen dan.
>> [...] ik stel al 3 keer een andere vraag, en ik krijg telkens geen antwoord op m'n vraag.
Niet opgeven, de aanhouder wint :-)
Maar je moet inderdaad niet drie keer een andere vraag stellen in de hoop dat je steeds hetzelfde antwoord krijgt. En dat is niet eens cryptisch bedoeld: er staat wat er staat.
>> Maar je moet inderdaad niet drie keer een andere vraag stellen...
Ik stel geen andere vraag, ik stel 'm hooguit op een andere manier in de hoop dat iemand 'm begrijpt. En tot op heden is er nog geen antwoord gegeven op de vraag.
>> Ozzie, ik begrijp de vraag wel, maar ik begrijp niet welk antwoord je zoekt.
Dan moet je dat even aangeven ;)
Ik heb tot op heden op deze manier gewerkt met een session class:
<?php
$session->set('user', 'Ward');
?>
Achter de schermen gebeurde er dit:
<?php
$_SESSION['user'] = 'Ward';
?>
Ik heb nu begrepen dat je met losse Session objecten moet werken:
<?php
$session = new Session('user', 'Ward');
?>
En dat je dit session object doorgeeft aan een session manager die het object opslaat:
<?php
$sm = new SessionManager();
$sm->update(new Session('user', 'Ward'));
?>
De SessionManager slaat de gegevens nu op in de $_SESSION array, maar mijn vraag is... HOE... wat gebeurt er achter de schermen? Worden de gegevens opgeslagen zoals ik dat zelf ook doe... op deze manier:
<?php
$_SESSION['user'] = 'Ward';
?>
Of wordt dat complete Session object opgeslagen:
<?php
$_SESSION['user'] = new Session('user', 'Ward');
?>
Snap je mijn vraag nu?
Dan kun je beter een onderscheid maken tussen één sessiemanager (voor één sessie) en meerdere sessieobjecten (voor verschillende klassen en key/value-paren).
<?php
$user = new User();
$user->setFirstName('Jan');
$user->setLastName('Jansen');
/* class SessionEntry implements Ozzie\Cache\EntryInterface */
$entry = new SessionEntry();
$entry->setValue($user);
/* class SessionManager implements Ozzie\Cache\CacheInterface */
$session = new SessionManager();
/* public function set(EntryInterface $entry) */
$session->set($entry);
?>