Gérer les sessions avec SQLite
Posté : 24 nov. 2010, 02:51
PHP peut gérer les sessions via SQLite, ce qui est très pratique dans un cas de partage de sessions par exemple.
Pour voir si votre serveur accepte cette fonctionnalité RDV dans votre phpinfo section Session -> Registered save handlers, si Sqlite est dans la liste c'est OK
Les deux façons pour activer SQlite pour les sessions :
La gestion est assez souple on peux modifier ca via les directives ini ou directement via des fonctions
- Version ini :
grâce à session.save_handler et session.save_path
- Version php :
grâce à session_module_name et session_save_path
Attention vous devez avoir le droit en écriture sur le dossier.
Un coup de session_start() voila notre session.db, malheureusement c'est du sqlite2 (je demanderais pour la gestion du 3)
Récupérer les sessions :
La base correspond a
- value : le contenu de la session
- updated : la date de la dernière mise a jour
(pas très compliquer)
Pour la suite on va utiliser PDO pour lire notre base, comme c'est du sqlite 2 le DNS sera sqlite2
Pour voir si votre serveur accepte cette fonctionnalité RDV dans votre phpinfo section Session -> Registered save handlers, si Sqlite est dans la liste c'est OK
Les deux façons pour activer SQlite pour les sessions :
La gestion est assez souple on peux modifier ca via les directives ini ou directement via des fonctions
- Version ini :
grâce à session.save_handler et session.save_path
ini_set('session.save_handler', 'sqlite');
ini_set('session.save_path', 'session.db'); Ou direct dans le php.ini ou en .htaccess (dans les cas je conseil de mettre le path en absolue)- Version php :
grâce à session_module_name et session_save_path
session_module_name('sqlite');
session_save_path('session.db');On peut bien-sûr mixer les différentes façonsAttention vous devez avoir le droit en écriture sur le dossier.
Un coup de session_start() voila notre session.db, malheureusement c'est du sqlite2 (je demanderais pour la gestion du 3)
Récupérer les sessions :
La base correspond a
CREATE session_data (
sess_id PRIMARY KEY,
value TEXT,
updated INT
)- sess_id : l'id de session- value : le contenu de la session
- updated : la date de la dernière mise a jour
(pas très compliquer)
Pour la suite on va utiliser PDO pour lire notre base, comme c'est du sqlite 2 le DNS sera sqlite2
try
{
$dbh = new PDO('sqlite2:' . session_save_path());
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
exit($e->getMessage());
}
Les données étant brutes dans la base il faudra utiliser session_decode et session_encode pour les manipuler, je vous conseil de bien lire la doc de ces fonctions car elles sont pas simple a utiliser puisque qu'elles écrasent la session en cours.