Foros del Web » Programando para Internet » PHP »

A los cinco minutos borra session

Estas en el tema de A los cinco minutos borra session en el foro de PHP en Foros del Web. Saludos. Tengo una pagina de ingreso, el cual digitan usuario y password y guarda en variables session el login y password en caso de que ...
  #1 (permalink)  
Antiguo 14/02/2006, 08:24
 
Fecha de Ingreso: febrero-2005
Mensajes: 650
Antigüedad: 12 años, 9 meses
Puntos: 2
A los cinco minutos borra session

Saludos.

Tengo una pagina de ingreso, el cual digitan usuario y password y guarda en variables session el login y password en caso de que sea correcto, y entra a una pagina de opciones para entrar a diversas paginas de acuerdo a los permisos de acuerdo al login, el problema es que cuando no se utiliza la pagina el php me borra esas variables de session y no deja entrar a ninguna pagina; deben salirsen y volver a entrar...
Como se soluciona eso????

Agradezco la ayuda y sugerencias que me puedan brindar.
  #2 (permalink)  
Antiguo 14/02/2006, 08:36
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Te está afectando el tiempo de expiración de las sesiones. Dicho valor se ajusta o define en principio por configuración de PHP (php.ini) en su directiva:

session.gc_maxtimelife

Pero también influye según propagues el SID (lo haces en cookies o por el URL?) .. Si lo haces en cookies, el tiempo de expiración de la cookie que propague el SID también influye, pero el que manda en última instancia es la anterior directiva.

Revisa la configuración de sesiones en:
www.php.net/session

De todas formas .. las sesiones deberías usarlas así como están .. con algún tiempo de expiración, tal vez aumentado un poco más para tu aplicación concreta .. pero no te "pases".

Un saludo,
  #3 (permalink)  
Antiguo 14/02/2006, 09:16
 
Fecha de Ingreso: febrero-2005
Mensajes: 650
Antigüedad: 12 años, 9 meses
Puntos: 2
Pregunta No entiendo si por Url...

Saludos Cluster.

Asi asigno mis variables de session:
$_SESSION["vp_login"]=$vp_login;
$_SESSION["vp_cedusu"]=$vl_c;

Y en las paginas leo esas variables...

Revise el php.ini y el valor esta a 1440, eso es en segundos?????

Cuantos minutos o segundos es prudente que no expire la session???
  #4 (permalink)  
Antiguo 14/02/2006, 10:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si... ese valor de session.gc_maxtimelife son segundos .. teóricamente es el valor por defecto y son 24 minutos.

El tiempo de expiración depende de tu aplicación. No será lo mismo tener una aplicación de consulta rápida en un lugar público donde alguien ingrese al sistema y tenga que salir cuando termine inmediatamente (o si se deja el sistema abierto .. que no sea válida la sesión por mucho tiempo) que el típico caso de una "ofician" .. todos con su puesto de trabajo - > su PC y aplicación ahí 8 horas diarias con la misma aplicación abierta.

----------

Te faltó concretar como propagas el SID (cookies? URL?) y los valores de expiración de estas .. por qué también influyen.

Un saludo,
  #5 (permalink)  
Antiguo 14/02/2006, 13:23
 
Fecha de Ingreso: febrero-2005
Mensajes: 650
Antigüedad: 12 años, 9 meses
Puntos: 2
Pregunta Que es SID???

Saludos Cluster.

No entendi eso...

"Te faltó concretar como propagas el SID (cookies? URL?) y los valores de expiración de estas .. por qué también influyen."

Como se como se concreta ese SID???

Si son 24 minutos porque se borra la session en 5 minutos???
  #6 (permalink)  
Antiguo 14/02/2006, 13:42
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 el "Identificador Único de Sesión" .. es la base del sistema de sesiones de PHP y gracias a el funcionan las sesiones.

En esta FAQ se explica un poco que es:
http://www.forosdelweb.com/showpost....&postcount=129

Por si acaso .. cuando menciono el termino "concretar" me refiero a: explicar .. definir .. aclarar...

Cita:
Si son 24 minutos porque se borra la session en 5 minutos???
Cuando indiques como tu aplicación está propagando el SID y como lo define tu configuración de PHP, se podrá ver mejor si está interviniedo alguno de esos factores.

La configuración de PHP sobre sesiones define como PHP va a propagar el SID:
www.php.net/session

Directivas:
session.use_trans_sid <- a ON define que PHP sobre-escribirá ciertos tag's HTML para insertar en ellos el SID

session.use_cookies <- a ON indica que PHP generará una cookie para propagar en ella el SID.

Por otro lado hace falta ver algo de código tuyo y ver como vinculas de un script a otro (links) ... Si no conoces que es el "SID" .. se "entiende" que no propagas el SID en el URL a "mano" en tus links o formularios y dejas que la configuración de PHP lo haga por tí de alguna forma. Coincide que se dan todos los casos en tus pruebas para que funcionen: lo típico es que PHP propague el SID en cookies y tus navegadores de pruebas acepten cookies. o propagas el SID en el URL y no tienen nigún redireccionamiento por header() de "Location" o ventana javascript que abres .. o redireccionamientos en javacript.

Como veras hay muchas "combinaciones" para ver como se pueden comportar tus sesiones, por eso es -tan- necesario saber como PHP está o va a propagar el SID y como tu aplicación lo hace. Como ya te he comentado .. si tu no sabes ni que es el SID .. estás a espensas de como PHP (su configuración) lo haga .. Esto no es bueno .. sobre todo cuando las cosas "fallan" o se comportan de forma inesperada.

Un saludo,
  #7 (permalink)  
Antiguo 14/02/2006, 16:15
 
Fecha de Ingreso: febrero-2005
Mensajes: 650
Antigüedad: 12 años, 9 meses
Puntos: 2
Exclamación Esta es parte del codigo...

En la pagina de logeo esta esto:
<?php
session_start();
//Hago la consulta y si trae datos hago lo siguiente:
$_SESSION["vp_login"]=$vp_login;
$_SESSION["vp_nombre"]=$vl_n;
$_SESSION["vp_apellidos"]=$vl_n1;
$_SESSION['valido'] = 1;
?>

Cuando llamo una pagina hago lo siguiente:
<?php
session_start();
if($_SESSION['valido']!=1)
{
echo "<script>";
echo "window.location='index.php';";
echo "</script>";
}
else
{
$NombFunc = $_SESSION["vp_nombre"]." ".$_SESSION["vp_apellidos"];
$Login = $_SESSION["vp_login"];
}
?>

Que mas me falta????
  #8 (permalink)  
Antiguo 15/02/2006, 05:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Sigues sin aclarar como propagas el SID (según tu configuración es lo que ahora falta al ver algo de tu código).

A tu código no le falta nada .. Tu asumes que propagas el SID en cookies (más que nada así lo debes estár haciendo en tu configuración por el tipo de redireccionamiento que usas: javascript). Ya te comenté que si tu sistema te funciona es (probable) por la combinación de: php.ini -> session.use_cookies = ON y que usas un navegador que acepta la cookie que PHP envia con el SID para propagarlo.

Lo peor de esto no es que "no te funcione" sino en no saber "por qué me funciona". Por eso te insisto tanto en que veas como propagas el SID .. que lo entiendas y así sigas revisando otros factores que pueden influir al tiempo de vida de tus sesiones: si ya te digo que "propagas el SID" en cookies (automaticamente las crea PHP por tu configuración) .. si te fijas en tu php.ini (o phpinfo()) veras otras directivas que definen "como" PHP va a crear esa cookie ..sobre todo su tiempo de expiración. Revisalo.

Otro detalle ... por tu seguridad .. no redirecciones con javascript:
Código PHP:
<?
if($_SESSION['valido']!=1)
{
echo 
"<script>";
echo 
"window.location='index.php';";
echo 
"</script>";
}
usa:

Código PHP:
<?
if($_SESSION['valido']!=1)
{
// redireccion directa con cabeceras HTTP
header ("Location: index.php");
// terminar la ejecución del script en este punto.
exit;
}
Probablemente al usar este método tendrás otro problema según donde uses ese código que se refiere a "cabeceras" y "salida" ya enviada al navegador antes de esa instrucción header(). Si te sucede, tendrías que indicar el código -completo- de tu script junto con el mensaje de error textual que obtengas para indicarte como re-ordenar tu código para que no se origine una "salida" (algo que envias al navegador: HTML, javascript .. un echo "algo" ..etc) antes de ese header().

Si quieres ver los problemas que te comento .. en tu navegador de pruebas, desactiva "javascript" .. veras que NO te redireccionará por qué lo haces en tu código por javascript y NO terminas la ejecución de tu script en ese punto y tu navegador en ese caso no ejecutaría Javascript.

Un saludo,
  #9 (permalink)  
Antiguo 15/02/2006, 15:07
 
Fecha de Ingreso: febrero-2005
Mensajes: 650
Antigüedad: 12 años, 9 meses
Puntos: 2
Aun no entiendo del SID...

Saludos Cluster...

He leido el link que me escribiste para leer acerca de sessions pero quede igual, sin entender acerca del SID como te mostre en el post anterior, lo que hago en cada pagina es validar si se conecto capturo en unas variables el contenido de session; para mostrar el codigo me queda dificil por el extenso contenido 2100 lineas de codigo....

Supongo que el SID lo enviara por cookies, no se...
  #10 (permalink)  
Antiguo 16/02/2006, 05:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Con la porción de código que expusistes ya me queda claro que TU no propagas el SID a "mano" en tus links ni redireccionamientos.

El resto ya te lo he comentado. El SID y su propagación lo define tu configuración de PHP .. "supongo" que lo harás por cookies .. pero eso debes concerlo tu.

Revisa los valores del tiempo de vida de la configuración de PHP sobre el tiempo de vida de esa cookie que PHP crea.

Esto no asegura que "ahí" esté el problema y tu solución .. pero como veras hay que ir descartando posibles configuraciones que puedan afectar a como se comportan las sesiones en tu caso.

Nos guste o no, las sesiones de PHP son altamente configurables y por eso es tan necesario conocer algunos conceptos (como el "SID" .. el más importate) para saber como trabajan las sesiones.

Un saludo,
  #11 (permalink)  
Antiguo 18/02/2006, 10:58
 
Fecha de Ingreso: febrero-2005
Mensajes: 650
Antigüedad: 12 años, 9 meses
Puntos: 2
Ahora sucede otro caso mas

Saludos Cluster.

Estan trabajando cuando puff se borra la session y vuelve a direccionarlo a la pagina de logeo, los usuarios estan furiosos por que pierden lo que han digitado...

Que sugerencia me puedes dar??
  #12 (permalink)  
Antiguo 18/02/2006, 13:58
 
Fecha de Ingreso: febrero-2001
Mensajes: 1.374
Antigüedad: 16 años, 10 meses
Puntos: 11
tenes que tener dos sistemas, uno que detecte si la sesion termino y otro que guarde la ultima pagina visitada.

con la primera detectas si la sesion se termino, guardas lo que envio el usuario y lo mandas al login, una vez que se logea verificas si el suario estaba en una pagina determinada, lo mandas ahi y finalmente cuando llegas a esa pagina publicas la informacion guardada.

algo similar hace este foro
  #13 (permalink)  
Antiguo 18/02/2006, 14:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Es cierto lo que comentas, .. las sesiones "nativas" de PHP no ayudan para nada en cuanto a conocer tiempos de expiración de sesiones individuales ni nada de control más "fino" sobre el tema.

Podrías hacer lo que te comenta Tukzone. Esto te implicará tener o tablas "temporales" para almacenar esa información .. o "flag's" extra en tus registros para definir el estado de esos datos "temporales" o definitivos (para los casos donde se terminó la sesión.

Podrías también usar otros sistemas de control de sesiones para tener control sobre el tiempo de expiración y así implementar por ejemplo "contadores" tipo "te queda tanto tiempo de la sesión" y .. que puedan "extender" esa sesión por más tiempo ... Por ejemplo, ADOdb dispone de una implementación de sesiones con estas características. Digamos que es una "extensión" (por qué PHP así lo permite) de las funciones básicas de sesiones clásicas de PHP.

Si quieres hecharle un vistazo:
http://phplens.com/lens/adodb/docs-session.htm

Un saludo,
  #14 (permalink)  
Antiguo 23/02/2006, 07:42
 
Fecha de Ingreso: febrero-2005
Mensajes: 650
Antigüedad: 12 años, 9 meses
Puntos: 2
Tengo otra duda...

Saludos Cluster y Tukzone...

Lo que entendi mas o menos de los dos ultimos post es que debo crear una tabla temporal con las variables session, eso lo hice, lo malo es que trabajo con informix y solo trabaja conexion por pagina.
Me explico: en la pagina de logeo hago la tabla temporal y escribo esos datos en la tmp; pero cuando direcciono a la pagina del menu y escojo una opcion(pagina) se ha borrado esa tabla tmp porque no trae ningun resultado...

Como hago para propagar SID???

Me tienen porque borra las variables session cuando estan trabajando.....

Agradezco la ayuda que me pueden brindar
  #15 (permalink)  
Antiguo 23/02/2006, 08:00
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 lo puedes propagar por el URL o por cookies (esto creo que ya lo he mencionado várias veces en este mensaje).

Todavía no has averigüado como propagas el SID según tu configuración de PHP. Eso lo puedes ver en tu php.ini o phpinfo() en todo el bloque de directivas de sesiones de PHP (session.xxxxxx = ......)

Lo primero que tienes que saber es "cómo" PHP va a estar propagando el SID y luego mirar tu código y ver en que puede afectar la forma que PHP propaga el SID .. por ejemplo por el tipo de redireccionamiento que hagas y demás.

A su vez .. si ya te digo que el SID se puede propagar por cookies .. y así lo estuviese propagando .. ya te imaginaras que tienes que teneer un navegador que acepte dichas cookies y que nadie más las esté bloqueando (antivirus lo suelen hacer .. ciertos plug-in de navegadores. ..etc).

En la documentación de PHP tienes ejemplos de como propaga el SID por el URL manualmente (en todos tus links y redireccionamientos que hagas). Pero .. no se trata de poner el "SID" por ponerlo y que "a lo mejor" te funcione tu aplicación (sesiones) .. Sino ver "por qué" se comporta así tu aplicación en función de tu configuración .. Propagar el SID por el URL no es seguro (pero si no hay más remedio .. se tendrá que hacer así, es cierto).

Un saludo,
  #16 (permalink)  
Antiguo 23/02/2006, 10:40
 
Fecha de Ingreso: febrero-2005
Mensajes: 650
Antigüedad: 12 años, 9 meses
Puntos: 2
Información Este es el bloque de session

Saludos Cluster.

Disculpame si no se debe copiar todo el bloque de session del php.ini

Código:
[Session]
session.save_handler = files

session.use_cookies = 1

session.name = PHPSESSID

session.auto_start = 0

session.cookie_lifetime = 0

session.cookie_path = /

session.cookie_domain =

session.serialize_handler = php

session.gc_probability = 1
session.gc_divisor     = 1000

session.gc_maxlifetime = 1440

session.bug_compat_42 = 0
session.bug_compat_warn = 1

session.referer_check =

session.entropy_length = 0

session.entropy_file =

;session.entropy_length = 16

;session.entropy_file = /dev/urandom

session.cache_limiter = nocache

; Document expires after n minutes.
session.cache_expire = 180

session.use_trans_sid = 0

; The URL rewriter will look for URLs in a defined set of HTML tags.
; form/fieldset are special; if you include them here, the rewriter will
; add a hidden <input> field with the info which is otherwise appended
; to URLs.  If you want XHTML conformity, remove the form entry.
; Note that all valid entries require a "=", even if no value follows.
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
Agradezco el tiempo que sacas para ayudarme.

Última edición por Cluster; 23/02/2006 a las 10:56
  #17 (permalink)  
Antiguo 23/02/2006, 11:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Está bien con la sección o extracto del PHP.ini que indicas.

Te puedo confirmar por lo que se vé en ese php.ini que la propagación del SID se hace preferentemente por Cookies:

Lo define:
session.use_cookies = 1

También se observa que la duración de esa cookie que PHP podría crear para propagar el SID es:

session.cookie_lifetime = 0

A "cero" se considera como cookie de "sesión" .. es lo que vulgarmente decimos "durará la sesión hasta que se cierre el navegador (o última ventana del sitio)". (Por supuesto todo esto si se propaga por cookie la sesión .. aun ahi más que ver para afirmar esto).

Con esta directiva (a 0 -> OFF) se confirma que en tu caso tu configuración de PHP fuerza totalmente la propagación del SID en cookies:

session.use_trans_sid = 0

Por ende .. ya "pasamos la pelota" al "lado del cliente" .. es decir .. tenemos que averigüar si tu navegador acepta cookies (esas que PHP está creando) y si otra cosa que uses como un firewall, antivirus o nivel de seguridad en tu navegador está bloqueando esas cookies.

Un saludo,
  #18 (permalink)  
Antiguo 27/02/2006, 08:36
 
Fecha de Ingreso: febrero-2005
Mensajes: 650
Antigüedad: 12 años, 9 meses
Puntos: 2
Pregunta Consejo

Saludos Cluster.
La configuración de cookies se hace por opciones de internet->Privacidad->opciones avanzadas; se da click en sobreeescribir la administración automatica de cookies, Cookies de origen-Aceptar, Cookies de terceros bloquear; no se si marcar lo que dice: Aceptar siempre las cookies de sesion.

Es asi como se configura las cookies?????

No hay riesgos de "hueco" de seguridad???

Como hago para propagar SID sin cookies???
  #19 (permalink)  
Antiguo 27/02/2006, 09:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por tattojk
Saludos Cluster.
La configuración de cookies se hace por opciones de internet->Privacidad->opciones avanzadas; se da click en sobreeescribir la administración automatica de cookies, Cookies de origen-Aceptar, Cookies de terceros bloquear; no se si marcar lo que dice: Aceptar siempre las cookies de sesion.

Es asi como se configura las cookies?????

No hay riesgos de "hueco" de seguridad???

Como hago para propagar SID sin cookies???
Si tu tienes algún problema con cookies o leistes por ahí .. lo mejor es que no seas "drastico" .. simplemente acepta las cookies de los sitios de tu confianza.

Propagar el SID por el URL (sin cookies) es mucho más peligroso que TU (o tu usuarios) acepten sólo las cookies de los sitios de su confianza.

Lee este documento sobre la propagación del SID en el URL:
http://www.acros.si/papers/session_fixation.pdf

Un saludo,
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 16:11.