IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend_Db PHP Discussion :

Zend Session et base de données


Sujet :

Zend_Db PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Par défaut Zend Session et base de données
    Bonjour,
    est-il possible de stocker les sessions dans une bdd avec zend ?

  2. #2
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Effectivement c'est possible, un exemple vaut mieux qu'un long discours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    ---- session.sql ----
     
    CREATE TABLE `sessions` (
      `id` varchar(32) collate latin1_general_ci NOT NULL,
      `access` int(10) default NULL,
      `data` text collate latin1_general_ci NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
     
     
    ---- bootstrap (index.php) ----
    ...
     
    Zend_Loader::loadClass('Zend_Db');
    Zend_Loader::loadClass('Zend_Session');
    Zend_Loader::loadClass('Concentre_Session_SaveHandler_Db');
     
    $params = array() /* paramètres de connexion a la base de données */
    $db = Zend_Db::factory('PDO_MYSQL', $params );
     
    Zend_Session::setSaveHandler(new Concentre_Session_SaveHandler_Db($db));
     
    ...
     
    ---- library/Concentre/Session/SaveHandler/Db.php ----
     
    <?php
     
    class Concentre_Session_SaveHandler_Db implements Zend_Session_SaveHandler_Interface {
     
    	private $_session;
    	public $maxTime;
    	private $db;
     
    	public function __construct($database) {
    		$this->db = $database;
    		$this->maxTime['access'] = time();
    		$this->maxTime['gc'] = get_cfg_var('session.gc_maxlifetime');
     
    		/*
    		session_set_save_handler(array($this, '_open'),
    			array($this, 'close'),
    			array($this, 'read'),
    			array($this, 'write'),
    			array($this, 'destroy'),
    			array($this, 'gc')
    		);*/
     
    		register_shutdown_function('session_write_close'); 
    	}
     
    	public function open($save_path, $name)
    	{
    		$this->gc( $this->maxTime['gc'] ); 
    		return true;
    	}
     
    	public function close()
    	{
    		$this->gc($this->maxTime['gc']);
    		return true;
    	}
     
    	public function read($id)
    	{
    		$allData = $this->db->fetchRow("SELECT `data` FROM `sessions` WHERE `id` =  :id",array('id' => $id));
    		$hasData = (bool) $allData != null;
     
    		return $hasData ? $allData['data'] : '';
    	}
     
    	public function write($id, $data)
    	{
    		$set = array(
    			'id' => $id,
    			'access' => $this->maxTime['access'],
    			'data' => $data
     
    		);
     
    		$where = $this->db->quoteInto("`id` = ?", $id);
    		$rows_affected = $this->db->update('sessions', $set, $where);
     
    		if ($rows_affected != 1) {
    			$rows_affected =  $this->db->insert('sessions', $set);
    		}
     
    		return $rows_affected;
    	}
     
    	public function destroy($id)
    	{
    		$where = $this->db->quoteInto("`id` = ?", $id);	
    		return $this->db->delete('sessions', $where);
    	}
     
     
    	public function gc($max)
    	{
    		$old = ($this->maxTime['access'] - $max);
     
    		$where = $this->db->quoteInto("`access` < ?", $old);	
    		return $this->db->delete('sessions', $where);
     
    	}
     
    }
     
    ?>
    Cordialement.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Par défaut
    j'étais sensiblement en train de coder la même classe ... ce lien me facilite grandement la chose, merci beaucoup :-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 26/02/2011, 12h30
  2. Zend et la base de donnée
    Par king_soft dans le forum Zend Framework
    Réponses: 4
    Dernier message: 07/12/2010, 09h52
  3. [1.x] Stockage des sessions en base de donnée
    Par bricecol dans le forum Symfony
    Réponses: 9
    Dernier message: 03/09/2010, 10h38
  4. Sessions et base de données
    Par Arrakis dans le forum Langage
    Réponses: 2
    Dernier message: 10/07/2009, 11h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo