Foros del Web » Programando para Internet » PHP »

opinion sobre mi script de sessiones

Estas en el tema de opinion sobre mi script de sessiones en el foro de PHP en Foros del Web. hola a todos, Tengo la duda de donde se pone la instrucción Código: session_cache_expire para que las sesiones terminen cuando el usuario cierra el navegador. ...
  #1 (permalink)  
Antiguo 24/05/2004, 11:43
 
Fecha de Ingreso: julio-2003
Mensajes: 5
Antigüedad: 14 años, 4 meses
Puntos: 0
opinion sobre mi script de sessiones

hola a todos,

Tengo la duda de donde se pone la instrucción
Código:
session_cache_expire
para que las sesiones terminen cuando el usuario cierra el navegador.

Lo puse de la siguiente forma en mi script:

Código:
session_name($usuarios_sesion); //nombre de la sesion
session_start();
session_cache_expire(0); //que termine la sesion cuando cierre el navegador...
if (!isset($_SESSION['us_email']) && !isset($_SESSION['us_niveles']))
{
	session_unset(); //setruimos las variables
	session_destroy(); //destruimos la sesion
	$link=conectarse(); //conectamos a la base de datos
	$sql = "SELECT email,nombre FROM user WHERE email='$femail' AND password='$fpass'";
	$result = mysql_query($sql,$link);
	if($row = mysql_fetch_array($result))
	{ 
	 @mysql_free_result($result);
	 @mysql_close($link);
	$nvuser=niveles_user_autorizados($femail);
	session_name($usuarios_sesion);
	session_start();
    session_cache_expire(0);
	$_SESSION['us_email']=$femail;
	$_SESSION['us_name']=$row['nombre'];
	$_SESSION['us_niveles']=$nvuser;
	} else {
		@mysql_close($link);
		Header ("Location: $redir?mssg=2"); //correo  no existente!
		exit;
		} //fin else
}//fin if
   $array_niveles="";
   $array_niveles=explode(".",$_SESSION['us_niveles']);
   if (!in_array ($nv, $array_niveles) || $array_niveles=="" )
   {
	 Header ("Location: $redirout?nvl=" .$nv); //no tiene derecho...
	 exit;
	}
Gracias de antemano por su ayuda.
  #2 (permalink)  
Antiguo 24/05/2004, 12:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En teoría session_cache_expire(0); va en el lugar que pusistes: despues de sesion_start() .. Pero lo que no hace exactamente es:

Cita:
para que las sesiones terminen cuando el usuario cierra el navegador.
Esa función sólo evita que la página sea "cacheada" por un navegador/proxy . .pero no tiene nada que ver con el tiempo de expiración de un SID válido.

Revisa las directivas tipo session.gc_maxtimelife y afines para controlar ese tiempo.

Por lo demás .. fijate que en tu flujo de código .. en várias ocasiones estás repitiendo la definición del nombre de sesión (session_name()) e inciandola (session_start()) (sobraría esas funciones de tu if() ya que lo defines al principio y se cumplan o no dichas condiciones simpre accedes/usas esa sesión.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 24/05/2004, 12:13
 
Fecha de Ingreso: julio-2003
Mensajes: 5
Antigüedad: 14 años, 4 meses
Puntos: 0
Gracias cluster,

a ver si entendi

O sea que el que se encarga de eliminarlas es el servidor mediante las instrucciones en el php.ini

Código:
session.gc_probability    = 1       ; percentual probability that the 
                                    ; 'garbage collection' process is started
                                    ; on every session initialization
session.gc_maxlifetime    = 1440    ; after this number of seconds, stored
esto indica que despues de 24 minutos el servidor las elimina?

a menos que la elimine con un logout en la pagina, en donde destruya la sesion?
  #4 (permalink)  
Antiguo 24/05/2004, 12:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
No exactamente ..

session.gc_maxtimelife dice que en 24 minutos (según esa configuración) .. el SID (Identificador Único de sesión) ya no será válido en entrará en el proceso de "garbage" (basura) en espera de (porcentaje de ejecuciones de session_start() que define session.gc_probability) donde será borrado físicamente el archivo de sesión creado en el servidor .. Pero para efectos de tu aplicación .. sí, podrías considerar que session.gc_maxtimelife es la que define ese tiempo de duración de una sesión.

Pero esto no depende de eso mismo sólo.. sino de como se propaga el SID.. si lo haces en cookeis .. ellas también tienen tiempo de expiración .. y siempre que este sea menor al gc_maxtimelife el que "madarà" será el tiempo de expiración de la cookie (session.cookie_xxxx)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 24/05/2004, 12:52
 
Fecha de Ingreso: julio-2003
Mensajes: 5
Antigüedad: 14 años, 4 meses
Puntos: 0
efectivamente se propaga por las cookies y tiene la configuracion a cero:

Código:
session.auto_start        = 0       
session.cookie_lifetime   = 0
esto quiere decir que efectivamente el que tiene el control es gc_maxlifetime.


Gracias por responder y aclarar mis dudas.

Saludos.
  #6 (permalink)  
Antiguo 24/05/2004, 13:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
El SID es válido durante gc_maxtimelife defina .. Pero si propagas el SID en cookies (con cookie_lifetime=0) .. el SID en ese cliente (PC, navegador) sólo será válido hasta que cierre la última ventana abierta de ese sitio (la cookie es de tipo "sesión" .. muere al cerrar el navegador).

Así que .. para tu aplicación la sesión "morirá" en esa situación .. pero si rescatases ese SID generado por algún médio (por qué lo obtienes con la llamada a SID como constante o session_name()."=".session_id() .. ) podrías seguir usando esa sesión hasta que session.gc_maxtimelife defina. (digamos que podrías "reiniciar" una sesión en ese tiempo pese que la cookie en ese cliente concreto ya no exista .. la cual es la que contenía ese valor del SID que es lo que nos hace referencia a la sesión en el servidor en si que contiene nuestros datos.).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 24/05/2004 a las 13:07
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 20:14.