Gérer les sessions par la base de données
Le but de cette page est d'envisager une solution afin d'utiliser une base de données (par exemple
MySQL mais la solution devrait pouvoir évoluer si
WikiNi gère un jour d'autre SGBD's) pour y stocker les variables de sessions de l'utilisateur.
Intérêt
Gérer les sessions via la base de données permet d'avoir un meilleur contrôle sur ces données. Lorsque l'on laisse PHP gérer les sessions, on ne sait a priori pas comment il fait, et même en supposant qu'il les gère par des fichiers (configuration par défaut), on ne sait a priori pas non plus où ces fichiers sont stockés. Il est dès lors impossible de travailler sur le contenu des sessions des autres visiteurs (toujours présents ou non).
Gérer les sessions par la base de données permet de le faire, ce qui peut être très utile pour :
- Récupérer des données au moment où une session devient périmée et doit donc être détruite. On peut par exemple envisager de stocker des informations sur le temps passé en ligne, le nombre de pages vues etc.
- Obtenir des informations sur les autres utilisateurs en ligne, ce que propose l'action WhoIsOnline.
Proposition de solution
Cette solution a été développée en parallèle avec l'
action WhoIsOnline. Elle stocke ainsi en base de données:
- L'identifiant de session
- L'adresse IP du visiteur (afin de renforcer la sécurité: il est ainsi beaucoup plus difficile d'usurper la session d'un autre utilisateur en réutilisant sont identifiant)
- Le nom de l'utilisateur
- La dernière page vue
- La méthode (handler) de vision de la dernière page
- L'heure de la dernière action de l'utilisateur
- Le nombre de pages vues
Instructions d'installation
(ces instructions se trouvent également dans le fichier instructions.txt fourni avec l'archive proposée ci-après)
IMPORTANT: Faites toujours une copie de sauvegarde de vos fichiers et de votre base de données avant de les modifier !
- Téléchargez le fichier sessions.php disponible à l'adresse: http://contributions-wikini.notredomaine.org/SessionsInDataBase-v.0.1.0-2005-04-12.zip et placez-le à la racine de votre wiki.
- Exécuter la requête SQL suivante:
CREATE TABLE `wikini_sessions` (
`id` MEDIUMINT( 5 ) NOT NULL AUTO_INCREMENT ,
`ip` VARCHAR( 15 ) NOT NULL ,
`session_id` VARCHAR( 32 ) NOT NULL ,
`datas` TEXT NOT NULL ,
`username` VARCHAR( 50 ) NOT NULL ,
`tag` VARCHAR( 50 ) NOT NULL ,
`handler` VARCHAR( 20 ) NOT NULL ,
`time` VARCHAR( 12 ) NOT NULL ,
`page_count` MEDIUMINT( 4 ) NOT NULL default 1,
PRIMARY KEY ( `id` ) ,
UNIQUE (
`ip` ,
`session_id`
)
);
- Ouvrir ./wakka.php et supprimer ou commenter le bout de code suivant:
// configuration du cookie de session
// determine le chemin pour les cookies
$a = parse_url($wakkaConfig['base_url']);
$CookiePath = dirname($a['path']);
// ajoute un '/' terminal sauf si on est à la racine web
if ($CookiePath != '/') $CookiePath .= '/';
$a = session_get_cookie_params();
session_set_cookie_params($a['lifetime'],$CookiePath);
unset($a);
unset($CookiePath
// start session
session_start();
- Juste avant "// go!", ajouter:
- // load session manager
- include 'sessions.php';
- Sauver/fermer, c'est fini !