Ik wil binnenkort eens gaan kijken om een session class te schrijven, hier in heb ik 2 opties of een combi optie.

- een wrapper schrijven voor de huidige session.
- een eigen session handler.
- een wrapper schrijven in combinatie met een eigen session handler.

Wat is het gemakkelijkste en eventueel de beste oplossing. Mijn idee was bijvoorbeeld zo.

simpel voorbeeld van login.
<?php
//code

if($auth->checkuser($_POST['username'], $_POST['password']))
{
$session->set('key','waarde');
header('location: index.php');
}
//nog meer code
?>
Wat is het verschil tussen punt 1 en 2?

In mijn framework heb ik een wrapper geschreven om de session superglobal, met support voor verschillende savehandlers, zoals een databaseimplementatie.

Volgens mij heeft het Zend Framework zelfs iets met "namespaces" gedaan, wat opzich ook een aardig idee is. Ik gebruik iets soortgelijks.
Zou je eens een klein voorbeeld kunnen laten zien hoe jij zoiets zou implementeren?
Pseudo-code (PHP5.3).
<?php
class Session {
public function createSection($id);//maakt sectie aan, $_SESSION[$id] = array(), geeft Section object terug
public function destroy();//session_destroy()
public function regenerateId();//session_regenerate_id
public function start(); //session_start()
}

class Section {
public function __get($key);
public function __isset($key);
public function __set($key, $value);
public function __unset($key);
}
?>
Daar komt het ongeveer op neer. Section is dus niets meer dan een storage object, welke momenteel (nog) wat goochelt met de magische functies.

Nogmaals, volgens mij werkt het ongeveer hetzelfde als bij het Zend Framework.
Als ik het goed begrijp heb je een namespace session en een class erbij, nu kun je dus vanuit /Countable, /IteratorAggregate en /Session je session class aanroepen.
Heb het voorbeeld in mijn vorige post iets aangepast, wat makkelijker gemaakt. De namespaces c.q. interfaces zijn niet echt van kritisch belang.

Het is opzich mogelijk om beide objecten Session en Section in elkaar te voegen, dan krijg je zoiets als jij ongeveer voorstelde in de beginpost.
<?php
$session = new Session();
$session->start();

function login(Session $session) {
...
$session->save('userid', 1);
...
}

function logout(Session $session) {
...
$session->delete('userid');
$session->destroy();
...
}
?>
Ok, bedankt dit klinkt helder. Het is dus handig om een gewone wrapper (class) om de session heen te bouwen.

Reageren