Ver Mensaje Individual
  #8 (permalink)  
Antiguo 21/04/2010, 09:11
Avatar de neodani
neodani
 
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 2 meses
Puntos: 20
Respuesta: Guardar sesiones en ficheros del servidor o en base de datos?

Cita:
Iniciado por Carxl Ver Mensaje
No sé si te refieres a que deseas guardar la sesión del usuario así cierre el navegador, ó que simplemente tienes duda de como se usan las sesiones.

Las sesiones simplemente se usan con $_SESSION y duran mientras el usuario esté activo en la página, y para eso, para que funcione no hay que guardar nada en ningún lado.

Saludos
Me refería a si era mejor manejar las sesiones contra una base de datos.

http://www.php.net/manual/en/functio...ve-handler.php

Ejemplo sacado de ahí.

Código PHP:
Ver original
  1. <?php
  2.   class SessionDB {
  3.     private $data=null;
  4.     private $session_id=null;
  5.     private $minutes_to_expire=3600; // TIME TO MAINTAIN DATA ON DB
  6.    
  7.     public function __construct(){
  8.       global $SESSION;
  9.      
  10.       if (isset($_COOKIE['session_id'])){
  11.         $this->session_id = $_COOKIE['session_id'];
  12.       } else {
  13.        
  14.         $this->session_id = md5(microtime().rand(1,9999999999999999999999999)); // GENERATE A RANDOM ID
  15.        
  16.         setcookie('session_id',$this->session_id);
  17.        
  18.         $sql = "INSERT INTO `tb_session_db` (`session_id`, `updated_on`) VALUES ('{$this->session_id}', NOW())";
  19.         mysql_query($sql);
  20.       }
  21.      
  22.       $sql = "SELECT `value` FROM `tb_session_db` WHERE `session_id`='{$this->session_id}'";
  23.       $query = mysql_query($sql);
  24.      
  25.       $this->data = unserialize(mysql_result($query, 0, 'value'));
  26.       $SESSION = $this->data;
  27.     }
  28.    
  29.     private function expire(){
  30.       $date_to_delete = date("Y-m-d H:i:s", time()-60*$this->minutes_to_expire);
  31.       $sql = "DELETE FROM `tb_session_db` WHERE `update_on` <= '$date_to_delete'";
  32.       mysql_query($sql);
  33.     }
  34.    
  35.     public function __destruct(){
  36.       global $SESSION;
  37.      
  38.       $this->data = serialize($SESSION);
  39.      
  40.       $sql = "UPDATE `tb_session_db` SET `value`='{$this->data}', `updated_on`=NOW() WHERE `session_id`='{$this->session_id}'";
  41.       mysql_query($sql);
  42.      
  43.       $this->expire();
  44.     }
  45.   }
  46.  
  47. /*
  48. TABLE STRUCTURE
  49.   CREATE TABLE IF NOT EXISTS `tb_session_db` (
  50.     `session_id` varchar(32) NOT NULL,
  51.     `value` blob,
  52.     `updated_on` datetime DEFAULT NULL,
  53.     PRIMARY KEY (`session_id`)
  54.   ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
  55. */
  56. ?>
  57.  
  58. With this file included, connected to MySQL database who has the table `tb_session_db` I can easy do that into my config file:
  59.  
  60. <?php
  61.   require_once('session_db.php');
  62.  
  63.     define('MYSQL_HOST','mysql.example.com');
  64.     define('MYSQL_USER','.......');
  65.     define('MYSQL_PASS','.......');
  66.     define('MYSQL_BASE','.......');
  67.    
  68.     mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) or die('Cannot connect');
  69.     mysql_select_db(MYSQL_BASE) or die('Cannot select DB');
  70.     mysql_set_charset('utf8_general_ci');
  71.    
  72.   $SESSION = null;
  73.   global $SESSION;
  74.   $session_db = new SessionDB();
  75. ?>

Muchas gracias de antemano!