session / manager

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Ozzie PHP

Ozzie PHP

20/02/2013 19:39:47
Quote Anchor link
Hallo,

Ik heb een tijdje terug al eens eerder een vraag gesteld over Sessions en een Session Manager. Omdat ik het nu ga programmeren wil ik er nog even op terug komen.

Eerder is mij verteld dat je iedere sessie (= ieder key/value paar uit de $_SESSION array) moet opslaan in een aparte Sessie class.

Nu heb ik ook een soort ParameterBag class gemaakt en vraag ik me af waarom ik niet ALLE sessie waarden in één zo'n class zou opslaan.

Als ik zoiets zou doen:

$session = new ParameterBag($_SESSION);
echo $session->get('username');

Wat is daar dan niet goed aan? Waarom moet zo'n sessie key/vale pair in een aparte class worden opgeslagen, en waarom heb je een Session Manager nodig?

Kan iemand mij het waarom uitleggen, en ook hoe zo'n Session Class en Session Manager eruit moeten zien? En hoe ze onderling met elkaar verband houden?

Alvast dank!

(Ik weet dat sommige aspecten hiervan al eerder aan bod zijn gekomen, maar ik wil het graag even op een rijtje hebben in dit topic, zodat ik precies snap hoe ik het moet programmeren).
Gewijzigd op 20/02/2013 19:41:26 door Ozzie PHP
 
PHP hulp

PHP hulp

26/04/2024 19:33:30
 
Eddy E

Eddy E

20/02/2013 19:42:23
Quote Anchor link
Ozzie PHP op 20/02/2013 19:39:47:
Eerder is mij verteld dat je iedere sessie (= ieder key/value paar uit de $_SESSION array) moet opslaan in een aparte Sessie class


Niet om het een of ander, maar waarom staan iedere key+value in een array denk je?
$_SESSION is toch gewoon een array?

Jij wilt dus een array met classes krijgen die elk 1 key/value bevatten? Dus een extra moeilijke tussenlaag inbouwen?

Wat zou het voordeel moeten zijn van $session->class->key = 'value' boven $_SESSION['key'] = 'value'?
 
Ozzie PHP

Ozzie PHP

20/02/2013 19:44:07
Quote Anchor link
Eddy, dat is dus ook precies mijn vraag! Mijn vraag is waarom je ieder key/value paar in een aparte Session class moet opslaan.
 
Eddy E

Eddy E

20/02/2013 19:53:04
Quote Anchor link
Geen idee. Lijkt mij redelijk nutteloos, overbodig en (mogelijkerwijs) veel trager dan een gewone array.
Maar goed, ik OOP niet.
 
Ozzie PHP

Ozzie PHP

20/02/2013 19:54:37
Quote Anchor link
Oké, ik wacht even wat meer reacties af. Wellicht kan Wouter nog wat duidelijkheid verschaffen.
 
Wouter J

Wouter J

20/02/2013 23:15:36
Quote Anchor link
Laten we allereerst even het woordje 'moeten' wat veranderen. OO is 1 grote mengelmoes van implementaties en er zijn altijd meerdere denkwijzes mogelijk. ik vertel hier op dit forum mijn denkwijze en hoe ik/symfony2 het doe/zou doen.




Laten we eerst het begrip 'session' uit pluizen. Een session is een stukje opgeslagen tekst dat voor een bepaalde korte tijd opgeslagen is in een database.

In het flat PHP kom je voornamelijk 1 versie van Sessions tegen en dat is de standaard PHP methode voor het afhandelen van sessies: Doormiddel van een array en cookies.

Maar er zijn natuurlijk nog veel meer mogelijkheden om data kort op te slaan. Denk bijv. aan opslaan in een bestandje of zelfs in een database (PdoSessionHandler).

We zien dus dat sessies op veel verschillende plekken terug gaan komen en daarom vindt ik het mooi om 1 Session klasse te maken, waardoor we deze altijd kunnen hergebruiken in onze code.
 
Ozzie PHP

Ozzie PHP

20/02/2013 23:20:42
Quote Anchor link
Wouter, dank je voor je reactie. Het gaat mij dus niet om een sessie die in een database staat, maar uitsluitend om sessies in de $_SESSION array.

Ik heb dus een soort parameterbag gemaakt waarin ik bijv. de POST en GET variabelen zet. Nu kan ik hier ook de $_SESSION variabelen inzetten, maar jij zei destijds dat ik dan de set() functie moest veranderen en de sessie telkens in een Session class moest stoppen. Iedere sessie (key/value paar) krijgt dan z'n eigen sessie class. Mijn vraag is wat dan precies de meerwaarde ervan is om die sessie in een aparte class te stoppen. Wat zou zo'n class bijvoorbeeld kunnen, wat met de parameterbag niet kan? Dat is wat ik graag zou willen begrijpen.
 
- Raoul -

- Raoul -

20/02/2013 23:23:39
Quote Anchor link
Ik doe dit niet puur met de sessie array, maar met cookies. Iedere app moet dan z'n eigen application key hebben, en vervolgens maakt mcrypt een unieke hash aan voor zo'n cookie om de inhoud ervan te beveiligen natuurlijk. In zo'n cookie namespace (naam kan je zelf instellen) kan je dan dingen writen en removen.
 
Ozzie PHP

Ozzie PHP

20/02/2013 23:27:25
Quote Anchor link
Oké Raoul, maar om het niet nog ingewikkelder te maken... laten we het even uitsluitend bij de $_SESSION houden. Ik zou gewoon zeggen: ik stop de hele $_SESSION array in 1 class, maar ik ben benieuwd waarom Wouter ieder key/value paar uit de array in een aparte class zet.
 
Wouter J

Wouter J

20/02/2013 23:31:04
Quote Anchor link
Omdat je dus niet altijd de session als een verzameling moet zien, maar ook als individuele objectjes die je ergens kunt opslaan. Dat je het nu in een array stopt heeft niks met de gedachte te maken, OO schrijf je om vooruit te denken en rekening te houden met het feit dat je Sessions ook op andere manieren kunt gaan gebruiken.
 
Ozzie PHP

Ozzie PHP

20/02/2013 23:37:32
Quote Anchor link
Oké, ik probeer je te begrijpen hè ;)

Stel nu, ik stop die hele $_SESSION in een parameterbag. In het ene geval stop ik alle waarden in een array $parameters en in het andere geval (jouw voorkeur) stop in alle waarden in een eigen class. Wat kun je dan in jouw situatie méér dan in de eerste situatie. Kun je een paar concrete voorbeelden noemen?
 
Erwin H

Erwin H

20/02/2013 23:42:57
Quote Anchor link
Nu ik er over nadenk (zoals Wouter hier tegenaan kijkt deed ik nog niet), zou je ieder aparte session variabele zichzelf kunnen laten opslaan. Stel je hebt elke waarde in een apart object zitten. Dan kan je die hele array van objectjes doorlopen en tegen ze zeggen: sla op. Zelf weten ze hoe en waar en voila, geen extra logica meer nodig.
 
Ozzie PHP

Ozzie PHP

20/02/2013 23:46:09
Quote Anchor link
Dat zou toch ook kunnen als je ze rechtstreeks in de $_SESSION array opslaat? Of als je ze eerst in een aparte array opslaat, dan daarna die hele array opslaan? Of begrijp ik even niet wat je bedoelt nu?
 
Erwin H

Erwin H

20/02/2013 23:51:38
Quote Anchor link
Maar jij hebt het nog steeds alleen over $_SESSION, terwijl Wouter het over verschillende bronnen heeft. Dat is hier een wezenlijk verschil. wat als jij alles uit $_SESSION en uit $_COOKIE (en weet ik veel waar nog meer van) in 1 array plaatst. Hoe weet je dan waar alles weer heen moet?
Als je elke waarde in zijn eigen object plaatst (en die objecten in een array), dan weten die objecten nog steeds waar ze de data weer moeten opslaan.

Maar goed, dit is gewoon een gedachte die ik had, zit verder geen 'ervaring' achter. Wouter kan er vast meer over zeggen.
 
Ozzie PHP

Ozzie PHP

20/02/2013 23:58:10
Quote Anchor link
Nee nee... ik plaats geen sessie en cookie waarden in 1 array! Dat heb ik nooit gezegd. De cookie en sessie waarden komen allebei in hun EIGEN class. Evenals de GET, de POST, de FILES en de SERVER waarden.

Deze waarden worden opgeslagen in een array binnen de class. We hebben dus 6 afzonderlijke classes.

Nu zei Wouter dat je de waarden uit de $_SESSION array niet rechtstreeks in een array moet opslaan, maar dat je er eerst een class van moet maken en die zet je dan weer in die array.

Stel je hebt 20 key/value paren in de $_SESSION array zitten. Met een key/value paar bedoel ik bijv. "username" => "Erwin H". Ik zou dan die 20 paren rechtstreeks in de array zetten. Wouter zou echter die 20 waarden eerst in een class zetten en die 20 classes dan opslaan in de array. Ik ben dus benieuwd naar het waarom.
 
Erwin H

Erwin H

21/02/2013 00:16:43
Quote Anchor link
1 of 6, het blijft dat je het hebt voorgedefinieerd in je class en je dus niet flexibel bent. Als er een 7e mogelijkheid bijkomt (bijvoorbeeld sessie data dat in je eigen database zit), dan moet je je class gaan aanpassen.
 
Ozzie PHP

Ozzie PHP

21/02/2013 00:35:08
Quote Anchor link
Huh? Dat moet je met afzonderlijke classes toch ook?

Ik snap niet wat je bedoelt met "1 of 6, het blijft dat je het hebt voorgedefinieerd in je class en je dus niet flexibel bent."
 
B de Zwaan

B de Zwaan

23/02/2013 19:43:21
Quote Anchor link
Ozzie PHP op 20/02/2013 23:58:10:

Nu zei Wouter dat je de waarden uit de $_SESSION array niet rechtstreeks in een array moet opslaan, maar dat je er eerst een class van moet maken en die zet je dan weer in die array.

Stel je hebt 20 key/value paren in de $_SESSION array zitten. Met een key/value paar bedoel ik bijv. "username" => "Erwin H". Ik zou dan die 20 paren rechtstreeks in de array zetten. Wouter zou echter die 20 waarden eerst in een class zetten en die 20 classes dan opslaan in de array. Ik ben dus benieuwd naar het waarom.



Ik denk niet dat Wouter de 20 paren afzonderlijk in een class zou zetten en vervolgens in een array. Dit is althans niet hoe symfony werkt.

Om het voorbeeld van symfony maar aan te houden.
Ze doen het daar ongeveer zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
class Session
{
    private $values = array();

    public function set($name, $value)
    {
        $this->values[$name] = $value;
    }
}



Je kunt dan vervolgens doen:

$session = new Session();
$session->set('naam', 'Ozzie');

echo $session->get('naam');

In symfony heet de values property $storage.
Je kunt dan in de constructor verschillende storage classes opgeven die elk op hun eigen manier het opslaan van de sessie waardes afhandelen.

Je kunt zo op een nette OOP manier je sessies implementeren.
Gewijzigd op 24/02/2013 14:15:17 door B de Zwaan
 
Ozzie PHP

Ozzie PHP

23/02/2013 23:07:05
Quote Anchor link
Dankjewel voor je uitleg. Maar Wouter bedoelt toch echt dat je de value eerst in een class stopt en dan in een array. Om jouw voorbeeld aan te houden, dan zou je zoiets als dit krijgen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
public function set($name, $value)
{

    $this->values[$name] = new SessionClass($name, $value);
}

?>


En daarom begrijp ik dus ook niet zo goed wat hier de meerwaarde van is. Ik zou het zelf ook doen zoals jij zegt, dus alle sessie key/value paren opslaan in een array.

P.S.

Wat bedoel je met "Je kunt dan in de constructor verschillende storage classes opgeven die elk op hun eigen manier het opslaan van de sessie waardes afhandelen." Kun je een voorbeeld geven?
 
Kees Schepers

kees Schepers

24/02/2013 11:56:19
Quote Anchor link
Wat B (Bart?!) de Zwaan bedoeld is dat je via de constructor kan aangeven waar de session data opgeslagen wordt. Database, memcached, file based (default), etc. Wellicht zit ik ernaast maar dan corrigeert hij me wel ;) Zend Framework heeft deze mogelijkheid ook. Het opslaan wordt dan ook in een bepaalde class geregeld welke een interface daarvoor implementeert.
 
B de Zwaan

B de Zwaan

24/02/2013 14:02:04
Quote Anchor link
Ha Kees, jup Bart hier ;)

@Ozzie: Ik geef je graag nog wat uitgebreider uitleg, maar kan iemand mij vertellen hoe ik netjes code voorbeelden invoer? Ik zal er wel dik overheen kijken maar ik zie de functie niet.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.