Foros del Web » Programando para Internet » PHP »

Guardar sesiones en ficheros del servidor o en base de datos?

Estas en el tema de Guardar sesiones en ficheros del servidor o en base de datos? en el foro de PHP en Foros del Web. Buenas, Qué recomiendan utilizar, que las sesiones se guarden en ficheros temporales del servidor (creo tengo entendido, que esta opción es la que viene por ...
  #1 (permalink)  
Antiguo 20/04/2010, 17:22
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 12 años, 9 meses
Puntos: 20
Guardar sesiones en ficheros del servidor o en base de datos?

Buenas,

Qué recomiendan utilizar, que las sesiones se guarden en ficheros temporales del servidor (creo tengo entendido, que esta opción es la que viene por defecto) se crean sesiones y cuando expiran se borra el fichero automaticamente del servidor.
O hacerlo almacenándolas en una base de datos?

Qué me aconsejan? La web que estoy diseñando bien podría tener las mismas visitas que un foro concurrido.

Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 20/04/2010, 17:33
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 10 años, 1 mes
Puntos: 334
Respuesta: Guardar sesiones en ficheros del servidor o en base de datos?

a que te refieres con eso?... si quieres registro de usuario es obio que base de datos.. con sessiones no puedes guardar para siempre un registro.. excepto crees archivos aparte con los datos (poco recomendable)
__________________
More about me...
~ @rhyudek1
~ Github
  #3 (permalink)  
Antiguo 20/04/2010, 17:51
Avatar de TheoriaX  
Fecha de Ingreso: agosto-2009
Ubicación: Hermosillo, Sonora
Mensajes: 217
Antigüedad: 10 años, 4 meses
Puntos: 5
Respuesta: Guardar sesiones en ficheros del servidor o en base de datos?

si es mejor k los guardas en la base de datos.. mas konfiable y te ahorras mas trabajo
__________________
Desarrollador .Net y Php
MCTS Framework 2.0:Windows Applications
Microsoft Certificated Profesional
  #4 (permalink)  
Antiguo 20/04/2010, 17:56
 
Fecha de Ingreso: febrero-2010
Mensajes: 37
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Guardar sesiones en ficheros del servidor o en base de datos?

Pués creo que lo más seguro es que las guardes en la base de datos, así las controlas mejor (por ejemplo las puedes asociar a las IPs en vez de crear cookies con la ID de la sesion en la máquina del visitante y de esta forma nadie podrá robar sesiones, aunque al cambiar las IPs dinámicas se perderían los datos).

El problema de las sesiones en la base de datos es ¿cómo las borras? Tendrías que crear un programita para que elimine las que esten caducadas de vez en cuando para que no se acumulen(en Windows es fácil, en Linux menos) o hacer un administrador y limpiarlas cada cierto tiempo. Pero seguro que es más seguro.

Las sessiones con archivos en el servidor y cookies en el ordenador del visitante son lo más fácil pero "gente mala" puede robar IDs de sesiones de otras personas y asignarselas a ellos, de esta forma pudiendo sacar datos confidenciales, aunque hay métodos para prevenir esto(por ejemplo, al abrir sesion crear un $_SESSION["user_ip"] = IP_DEL_USUARIO y cada vez que se haga una operacion con variables guardadas en las sesiones que se compruebe que la IP del usuario es la guardada en la sesion.

Depende de que tipo de sitio estas creando.
  #5 (permalink)  
Antiguo 21/04/2010, 00:50
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 12 años, 9 meses
Puntos: 20
Respuesta: Guardar sesiones en ficheros del servidor o en base de datos?

Más que nada quería saber vuestra opinión con el tema del manejo de las sesiones, es que he visto los dos escenarios en el trabajo, y guardar las sesiones en ficheros del servidor me parece bastante engorroso, pero si las guardo en la base de datos esta sufrirá con tantas consultas!

Sigo confuso, como las tenéis implementadas vosotros? en bbdd?

Muchas gracias
  #6 (permalink)  
Antiguo 21/04/2010, 08:22
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 10 años, 1 mes
Puntos: 334
Respuesta: Guardar sesiones en ficheros del servidor o en base de datos?

no te preocupes por hacerle consultas a la base de datos.. mientras estas sigan un esquema ordenado nunca sera mucho.. (para eso estan diseñadas...)
__________________
More about me...
~ @rhyudek1
~ Github
  #7 (permalink)  
Antiguo 21/04/2010, 08:52
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 13 años, 4 meses
Puntos: 70
Respuesta: Guardar sesiones en ficheros del servidor o en base de datos?

Cita:
Iniciado por neodani Ver Mensaje
Sigo confuso, como las tenéis implementadas vosotros? en bbdd?
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
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #8 (permalink)  
Antiguo 21/04/2010, 10:11
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 12 años, 9 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!

Etiquetas: ficheros, sesiones, servidores
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:25.