sessie en cookie

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Ozzie PHP

Ozzie PHP

18/10/2013 20:24:59
Quote Anchor link
Ola mensen,

Ik zat me ineens wat af te vragen. Als je een framework hebt, dan haal je eerst het request binnen. Onderdeel van dat request zijn onder andere de sessie-data en cookie-data.

Nu zat ik me dus af te vragen... stel ik wil iets in een cookie of sessie wegschrijven, dan zou ik zoiets kunnen doen: $this->container->get('request')->getSession()->save('foo', $foo);

Maar toen bedacht ik me dat het eigenlijk heel vreemd is om via het request (datgene wat binnenkomt) iets op te slaan in een cookie of sessie. Want eigenlijk zou het request alleen de data van de cliënt moeten vasthouden, en zou je daar verder niks mee moeten kunnen doen. Toch? Anders gezegd, het lijkt me vreemd om data op te slaan in het request dat van de cliënt afkomstig is.

Vraag 1) Is mijn bovenstaande gedachte correct?

Oké. Stel nu dat we dan de sessie gegevens vanuit het request doorsturen naar een session handler. Dan kunnen we via die session handler iets gaan opslaan in de sessie. Dan sla ik de informatie dus niet meer op via het request. Dat lijkt me een stuk beter!

Vraag 2) Is bovenstaande redenatie correct?

Vraag 3) De laatste vraag. Stel dat we een session handler hebben, is die dan een onderdeel van de response? Ik vraag me dit af, omdat je door informatie in sessie (of cookie) te schrijven, je in feite iets wegschrijft bedoeld voor de cliënt. Je geeft een response richting de cliënt zou ik denken. Als je dan iets wil opslaan in de sessie, dan zou je zoiets krijgen:

$container->get('response')->getSession()->save('foo', $foo);

Klopt deze gedachtengang enigszins? Is een session handler inderdaad onderdeel van de response, of staat een session handler op zichzelf? Of is het misschien wel onderdeel van een storage service, dus zoiets: $container->get('storage')->getSession()->save('foo', $foo);
Gewijzigd op 18/10/2013 20:31:26 door Ozzie PHP
 
PHP hulp

PHP hulp

27/11/2024 23:46:16
 
Wouter J

Wouter J

18/10/2013 23:32:34
Quote Anchor link
Een session en zijn handler staan volledig los van het request response verhaal.

Sessies zijn ook niet alleen $_SESSIONS dingen. Sessies zijn kleine waardes die je tijdelijk opslaat. Je kan bijv. ook sessies in je database stoppen.

Dus het opslaan van sessies wordt dan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$container
->get('session.default_handler')->save(...);
?>


Even voor de zekerheid, je begrijpt dat de bovenstaande regel niet echt in je code gebruikt moet worden, maar dat je de session.default_handler service injecteert in je class en dan $this->sessionHandler->save(...) gebruikt?
 
Ozzie PHP

Ozzie PHP

19/10/2013 00:55:47
Quote Anchor link
Thanks Wouter. Ik ben de laatste dagen veel aan het nadenken over de "structuur" van mijn framework. In het verleden heb ik veel "on-the-fly" gedaan. Nu wil ik eerst nadenken voordat ik dingen ga maken. Vandaar dat ik de laatste dagen wat meer vragen stel dan gewoonlijk. En dankjewel voor je antwoord. Ik had er eigenlijk niet zo bij stil gestaan dat je sessies inderdaad ook in de database kan stoppen (alhoewel ik nog niet weet wat het voordeel daarvan is).

Je laatste opmerking was overigens ook wel nuttig. Als ik het zo lees dan is het inderdaad heel logisch wat jij zegt, maar in gedachten dacht ik dus inderdaad om in een class gewoon zoiets te doen:

$container->get('session.default_handler')->save(...);

Maar inderdaad, in de class injecteren dus! Thanks voor de reminder.

Ik heb wel nog een andere vraag die hier een beetje mee samenhangt. Misschien kun je me daar nog bij helpen.

Ik weet niet zo goed welke services "bij elkaar horen". Hoe leg ik dat uit... Bijvoorbeeld... als ik cookie-data wil uitlezen, of post- of get-data, dan is dat mooi om dat via een "request"-service te doen, dus zoiets als:

$container->get('request')->getCookie()->get('foo');

De request service (correct me if I'm wrong) zou je dan weer kunnen injecteren met de cookie, post, get services enz.

Als je dat in een "boomstructuur" giet dan krijg je dus (grofweg) eigenlijk zoiets:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
Services:

-request
     - cookie
     - get
     - post
     - enz.

Nu vraag ik me af of er nog meer services zijn die "onderdeel" zijn van een andere service. M'n vraag klinkt misschien een beetje stom, maar ik hoop dat je begrijpt wat ik bedoel. Eerder vandaag noemde jij bijv. het voorbeeld van de User die onder de SecurityContext valt.

Concreet: ik ben nu bezig met een paths service (ja, ik weet dat jij het via parameters doet, maar ik doe het via een service). En in het verlengde daarvan wil ik ook een url service maken. Wat ik uiteindelijk wil kunnen doen is dit:

$container->get('paths')->get('library');

of dit:

$container->get('urls')->get('index');

Nu is mijn vraag... kan ik paths en urls "zomaar" out of the blue aanroepen? Ja tuurlijk kan dat, want dat doe ik hierboven... maar is dit "mooi"? Of moet ik Paths en Urls onder een andere service hangen? En zo ja, onder welke? Wat zou dan een mooie "kapstok" service zijn? Ik zat zelf bijv. te denken aan iets als "system". Dan krijg je dus zoiets:

$container->get('system')->getPaths()->get('library');

Alleen... system is weer zo globaal, dat je daar dan eigenlijk alles wel weer onder kunt hangen. Wat is jouw visie hierop? Paths en Urls gewoon als losse service instellen, of onderbrengen onder een andere service... maar in dat geval, wat zou dan een mooie naam zijn?
 
Wouter J

Wouter J

19/10/2013 01:02:30
Quote Anchor link
> De request service (correct me if I'm wrong) zou je dan weer kunnen injecteren met de cookie, post, get services enz.

Wrong! Request is een hele vreemde service en het is een service die de makers van het symfony framework nog steeds bezig houdt. Wat het vreemde is aan deze service is dat hij niet wordt aangemaakt door de service container, maar hij wordt onthefly in de service container ingesteld.

> Wat is jouw visie hierop?

- paths, zoals al eerder vertelt, ik zou alle paths in parameters opslaan.
- routes, worden aangemaakt door de router
 
Ozzie PHP

Ozzie PHP

19/10/2013 01:39:45
Quote Anchor link
"Wrong! Request is een hele vreemde service en het is een service die de makers van het symfony framework nog steeds bezig houdt. Wat het vreemde is aan deze service is dat hij niet wordt aangemaakt door de service container, maar hij wordt onthefly in de service container ingesteld."

Ah oke... maar cookie, get, post enz. vallen wel onder de request service. Je benadert ze niet rechtstreeks maar via de request service.

Wat betreft de paths, ik weet dat jij ze als parameters zou opslaan, maar ik wil ze dus in een service stoppen. Persoonlijke voorkeur. Maar mijn vraag is dus... mag je zo'n service gewoon "losstaand" instellen, of moet je het onder een "kapstok" hangen. Ander voorbeeld. Stel je hebt een e-mailer service of een pdf service. Stel je die "op zichzelf" in, of hang je ze onder een kapstok...

Op zichzelf:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$container
->get('e-mailer')->send();
$container->get('pdf')->create('foo_pdf', $foo_data);
?>

of onder een "kapstok"...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$container
->get('communication')->getEmailer()->send();
$container->get('generators')->getPdf()->create('foo_pdf', $foo_data);
?>

Moet je dus iedere service onder een soort overkoepelende service hangen, of juist niet... en moet iedere service "op zichzelf" staan?

("- routes, worden aangemaakt door de router". Uhm ja, maar routes zijn geen urls toch? Of combineer jij de routes en urls?)
 
Ozzie PHP

Ozzie PHP

20/10/2013 14:25:26
Quote Anchor link
* bump *

Iemand nog een idee?
 
Wouter J

Wouter J

20/10/2013 16:07:11
Quote Anchor link
>> Ah oke... maar cookie, get, post enz. vallen wel onder de request service. Je benadert ze niet rechtstreeks maar via de request service.

Ja, maar die kunnen niet door de service container worden toegevoegd aan de request service. Dus wanneer je hem aanmaakt moet je iets als $container->addService('request', $request); doen.

>> ("- routes, worden aangemaakt door de router". Uhm ja, maar routes zijn geen urls toch? Of combineer jij de routes en urls?)

Dan vraag ik me af wat je met urls bedoelt
 
Ozzie PHP

Ozzie PHP

20/10/2013 16:15:47
Quote Anchor link
>> Ja, maar die kunnen niet door de service container worden toegevoegd aan de request service. Dus wanneer je hem aanmaakt moet je iets als $container->addService('request', $request); doen.

Duidelijk!

>> Dan vraag ik me af wat je met urls bedoelt

Stel je wil een plaatje tonen en alle plaatjes staan in de map "images", dan wil ik in mijn code dit kunnen doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$image_url
= $container->get('urls')->get('image');
// En als ik in dan in een view een plaatje nodig heb...
echo $image_url . 'mijnplaatje.jpg';
?>

En dat zou dan weer moeten resulteren in http://www.mijnsite.nl/images/mijnplaatje.jpg. En hetzelfde kun je doen voor css urls, javascript urls enz.

Toevoeging op 20/10/2013 16:20:54:

Tussen 2 haakjes...

>> Ja, maar die kunnen niet door de service container worden toegevoegd aan de request service. Dus wanneer je hem aanmaakt moet je iets als $container->addService('request', $request); doen.

Je zou ook zoiets kunnen doen toch?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$request
= $container->get('request');
$request->addGlobals($globals);
?>
 
Wouter J

Wouter J

20/10/2013 16:32:51
Quote Anchor link
>> Je zou ook zoiets kunnen doen toch?

Nee, want bij een nieuw request wil je een nieuwe instance, niet dezelfde instance met andere waardes.
 
Ozzie PHP

Ozzie PHP

20/10/2013 16:56:27
Quote Anchor link
Die snap ik even niet Wouter. Wat versta jij onder een request? Ik versta daaronder het request van de cliënt (en niet een internal request). Per page request heb je dus maar 1 request.

Ik snap ook niet wat jij bedoelt met "want bij een nieuw request wil je een nieuwe instance". Overal in je code waar je het request nodig heb, wil je toch hetzelfde request terugkrijgen?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

20/10/2013 18:01:59
Quote Anchor link
Per page request heb je dus maar 1 request.
Klopt, maar resulteert in meerdere requests bv voor css, js, images etc.
 
Ozzie PHP

Ozzie PHP

20/10/2013 18:03:57
Quote Anchor link
Ger van Steenderen op 20/10/2013 18:01:59:
Per page request heb je dus maar 1 request.
Klopt, maar resulteert in meerdere requests bv voor css, js, images etc.

Ja, maar daar heb je toch geen extra request services voor nodig :-s
Of zie ik iets over het hoofd nu?
 
Wouter J

Wouter J

20/10/2013 18:18:09
Quote Anchor link
We hebben hier een tijd geleden ook al een discussie over gehad, maar je hebt ook subrequests
 
Ozzie PHP

Ozzie PHP

20/10/2013 19:33:30
Quote Anchor link
Ja, ik herinner me ook zoiets :)

Maar van het "hoofdrequest" wil je toch altijd dezelde instantie terugkrijgen? Maak jij dan onderscheid in je services tussen een hoofdrequest en een subrequest?

Maar uitgaande dat ik maar 1 request gebruik, dan kan ik die toch instellen als service, en daar dan de data in stoppen... in plaats van eerst een class maken, vullen met data en die aan de services meegeven?
 
Wouter J

Wouter J

20/10/2013 19:39:19
Quote Anchor link
>> Maar uitgaande dat ik maar 1 request gebruik, dan kan ik die toch instellen als service, en daar dan de data in stoppen... in plaats van eerst een class maken, vullen met data en die aan de services meegeven?

Hoe wil jij $_POST en $_GET waardes invullen via de container?
 
Ozzie PHP

Ozzie PHP

20/10/2013 19:45:49
Quote Anchor link
Die komen van buitenaf...

De request-service is dus in 1e instantie niet gevuld. ALs onderdeel van je initialisatie haal je dan de lege request-service op en die vul je, bijv. zo:

$container->get('request')->addGlobals($globals);

Waarbij de globale data dus in de $globals array zit.
 
Wouter J

Wouter J

20/10/2013 20:06:33
Quote Anchor link
En dat vind je mooie OO?
 
Ozzie PHP

Ozzie PHP

20/10/2013 20:08:55
Quote Anchor link
Euh.. wat bedoel je daarmee? Wat is daar minder mooi aan dan jouw oplossing? Verklaar je nader, want ik zie niet wat je bedoelt te zeggen.
 
Wouter J

Wouter J

20/10/2013 20:10:48
Quote Anchor link
Gewoon, ik wou dat jij ging nadenken of je niet veel te veel met 'hoe kan ik het in de code het makkelijkst toepassen' (de spaghetti methode) en niet met 'hoe zou het in OOP het mooiste zijn' (de OO denk methode) bezig was.
 
Ozzie PHP

Ozzie PHP

20/10/2013 20:29:11
Quote Anchor link
Ja, maar wilde je nu dat ik ging nadenken... of vond jij het zelf niet mooi? Mij lijkt het namelijk wel mooi om het zo te doen.
 
Wouter J

Wouter J

20/10/2013 20:31:30
Quote Anchor link
:) Leuk, ik vind dit niet mooi. Waarom? Bedenk eens wanneer we ook al weer hadden besloten argumenten in de constructor te plaatsen en wanneer deze via een setter/adder/whatever ingesteld zouden worden. Ga vervolgens eens naar jouw voorbeeldje kijken waarbij je de container even weg denkt en bedenk je wat je dan 'oo-er' vind.
 

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.