Wikini

GererLesSessionsEnBase

PagePrincipale :: DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur :: Vous êtes ec2-3-80-85-76.compute-1.amazonaws.com

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 :

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:

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 !
  1. 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.
  2. 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` 
    		)
    	);
    
  3. 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();
  4. Juste avant "// go!", ajouter:
    • // load session manager
    • include 'sessions.php';
  5. Sauver/fermer, c'est fini !

Il n'y a pas de commentaire sur cette page. [Afficher commentaires/formulaire]