login  Naam:   Wachtwoord: 
Registreer je!
 Tutorials

Tutorials > PHP


Gegevens:
Geschreven door:
Stijn
Moeilijkheidsgraad:
Moeilijk
Hits:
11201
Punten:
Aantal punten:
 (4.17)
Aantal stemmen:
6
Stem:
Niet ingelogd
Nota's:
 Lees de nota's (11)
 


Tutorial:

Zend Session (Zend Framework)

Zend Framework: sessions
Menu: 1. Inleiding
2. Een sessie starten
3. Data schrijven/lezen in/uit een sessie
4. Sessie data vernietigen
    4.1. Vernietigen na aantal seconden
    4.2. Vernietigen na aantal hits
    4.3. Manueel vernietigen
5. Sessies (un)locken
6. Tot slot

1. Inleiding


Voor we een login maken met Zend Framework (zie volgende tutorial) moeten we eerst beginnen met het begin. Je moet niet de andere 5 tutorials van mij doorlopen hebben om deze te kunnen begrijpen. Zend Framework biedt meer dan MVC alleen. Je moet wel iets kennen over het framework en iets over Zend_Loader.

Sessies zijn niets meer dan tijdelijke bestanden die op de server van de website worden opgeslagen en die informatie bevatten. In php kan je altijd sessies herkennen aan $_SESSION, in zend framework wordt dit anders en daar gaan we ook direct mee beginnen.

Meer info over sessies:

http://www.sitemasters.be/?pagina=tutorials/tutorials&cat=4&id=4
http://be2.php.net/session

2. Een sessie starten


In je bootstrap (index.php) bestand zet je meestal bovenaan de php functie session_start() om een sessie te starten. In zend framework is dit ook bijna hetzelfde. Je zet nadat je de Zend_Loader hebt geinclude de volgende code.

index.php:
Zend_Loader::loadClass('Zend_Session');

De session class is nu geinclude en kan dus overal aangeroepen worden. Je kan onder die loadClass(...); direct al je sessie starten. We starten onze sessie met de static functie start(). Dit is de uiteindelijke code om de sessie te starten:

index.php:
Zend_Loader::loadClass('Zend_Session');

//start session
Zend_Session::start();


Voila de sessie is gestart, niet moeilijk.

3. Data schrijven/lezen in/uit een sessie


Men maakt meestal gebruik van sessies om te controleren of de gebruiker is ingelogd of om bepaalde data lange tijd te onthouden. Daarom is het van essentieel belang dat je weet hoe je data schrijft in een sessie mbv Zend_Session. Sessie data schrijven is niet moeilijk, kijk maar naar volgende voorbeeld (de uitleg vind je onder de code).

voorbeeld.php:
$fooSpace = new Zend_Session_Namespace('foo');

//schrijf bar in gaz
$fooSpace->gaz 'bar';

//andere pagina
$fooSpace = new Zend_Session_Namespace('foo');
echo 
$fooSpace->gaz;


code uitleg:
- new Zend_Session_Namespace(...): Zend Session werkt met namespaces. Je moet dit zien als een soort van array waarin allerlei sessie variablen zijn opgeslagen. Eigenlijk ziet dit er zo uit: $_SESSION['foo']['gaz'] = 'bar'. Namespaces zijn gemakkelijk om verschillende soorten sessie data te onderscheiden van elkaar. Stel dat je een community website hebt dan is het logisch dat je sessie data schrijft voor die module, bijvoorbeeld Nieuwsberichten en sessie data voor de accounts. Je kan het makkelijkst voorstellen als een frigo waarin je fruit bovenaan legt en de blikken frisdrank in het rek eronder. Je gaat geen blik cola tussen de appels gaan leggen.
- ->gaz = 'bar': gaz is de naam van je sessie variable en bar is de data van je sessie die je toekent aan gaz.
- Stel dat je die variable op een andere pagina wilt weergeven dan moet je opnieuw een instantie aanmaken van die Namespace zodat alle data geladen wordt van die specifieke namespace. Het uitlezen is makkelijk.

Je kan ook een array schrijven. Dit is hetzelfde principe, kijk maar naar het volgende voorbeeld:

voorbeeld.php:
$fooSpace = new Zend_Session_Namespace('foo');

//schrijf bar in gaz
$fooSpace->gaz 'bar';
$fooSpace->aFruit = array('appels' 'peren' 'bananen');

//andere pagina
$fooSpace = new Zend_Session_Namespace('foo');
echo 
$fooSpace->gaz;
echo 
$fooSpace->aFruit[0]; //appels


Ziezo, je kan nu al data schrijven in een sessie en terug lezen.

4. Sessie data vernietigen


Het kan gebeuren dat je bepaalde sessie data wilt vernietigen. Je kan sessie data vernietigen na een aantal seconden of na een aantal hits of gewoon manueel vernietigen. Je kan ook al je data in één keer vernietigen door de destroy() functie te gebruiken. Hier een voorbeeldje van hoe je die moet gebruiken.

voorbeeld.php:
//vernietig alles
Zend_Session::destroy();


4.1. Vernietigen na aantal seconden


We vallen direct me de deur in huis en nemen ons voorbeeldje over van puntje 3 en voegen één extra lijntje code eraan toe.

voorbeeld.php:
$fooSpace = new Zend_Session_Namespace('foo');

//schrijf bar in gaz
$fooSpace->gaz 'bar';
$fooSpace->aFruit = array('appels' 'peren' 'bananen');

//vernietig aFruit na 5 seconden
$fooSpace->setExpirationSeconds('aFruit');

//andere pagina
$fooSpace = new Zend_Session_Namespace('foo');
echo 
$fooSpace->gaz;
echo 
$fooSpace->aFruit[0]; //appels, refresh eens na 5 seconden


code uitleg:
- setExpirationSeconds(...): vrij vertaalt betekend dit dat de data vernietigd wordt na zoveel seconden. Hier wordt dus na 5 seconden de array aFruit vernietigd. Je moet dit zetten nadat je de sessie variable hebt gemaakt.

4.2. Vernietigen na aantal hits


Opnieuw hetzelfde als 4.1.

voorbeeld.php:
$fooSpace = new Zend_Session_Namespace('foo');

//schrijf bar in gaz
$fooSpace->gaz 'bar';
$fooSpace->aFruit = array('appels' 'peren' 'bananen');

//vernietig de sessie na 5 hits
$fooSpace->setExpirationHops(5);

//andere pagina
$fooSpace = new Zend_Session_Namespace('foo');
echo 
$fooSpace->gaz;
echo 
$fooSpace->aFruit[0]; //appels


code uitleg:
- setExpirationHops(...): dit betekend dat na het aantal ingevulde hits alle sessie data wordt vernietigd van die Namespace. Dus hier kan je geen aparte sessie variable vernietigen na zoveel hits.

4.3. Manueel vernietigen


Ook hier een voorbeeld met de uitleg.

voorbeeld.php:
$fooSpace = new Zend_Session_Namespace('foo');

//schrijf bar in gaz
$fooSpace->gaz 'bar';
$fooSpace->aFruit = array('appels' 'peren' 'bananen');

//vernietig aFruit
unset( $fooSpace->aFruit );

//andere pagina
$fooSpace = new Zend_Session_Namespace('foo');
echo 
$fooSpace->gaz;
echo 
$fooSpace->aFruit[0]; //appels


code uitleg:
- unset(...): je gebruikt de functie unset om een sessie variable te vernietigen. Is hetzelfde principe als je een gewone sessie variable zou vernietigen.

5. Sessies (un)locken


Je kan een sessie namespace locken. Dit betekend dat je er geen data meer aan kan toevoegen (read-only). Je maakt bijvoorbeeld een login, dan zet je $loginSpace->username = 'stijn' en lock je de sessie aangezien de username niet verandert tenzij de gebruiker zijn username kan bewerken, dan kan je die tijdelijk unlocken en weer locken. We gaan dit eens toepassen.

voorbeeld.php:
loginSpace = new Zend_Session_Namespace('login');

$loginSpace->username 'stijn';
$loginSpace->lock();

//andere pagina
$loginSpace = new Zend_Session_Namespace('login');
$loginSpace->username 'andere username'//geeft een error

//bewerk de username
$loginSpace = new Zend_Session_Namespace('login');
if( 
$loginSpace->isLocked() ) {
    
$loginSpace->unlock();
}
$loginSpace->username 'stijn1989';
$loginSpace->lock();


code uitleg:
- lock(): met deze functie wordt de namespace gelockt en kan men dus geen data meer schrijven in deze namespace.
- isLocked(): deze geeft een boolean terug. De functie controleert of de namespace gelocked is of niet.
- unlock(): met deze functie unlock je een namespace zodat men terug data kan schrijven in de namespace.

6. Tot slot


Ziezo dit was de algemene en nodige informatie die je nodig hebt om aan de slag te kunnen met Zend Session. Natuurlijk kan je er nog meer in verdiepen door de handleiding te lezen (zie volgende link) en eens te experimenteren.

http://framework.zend.com/wiki/display/DOCDEVNL/30.+Zend_Session

Vragen of opmerkingen -> stuur mij een PM of plaats een reactie.

Stijn Leenknegt


« Vorige tutorial : Websites maken met Zend Framework: deel 5/5 Volgende tutorial : Zend Auth (inloggen mbv Zend Framework) »

© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.018s