Foros del Web » Programando para Internet » PHP »

Sesiones en PHP5

Estas en el tema de Sesiones en PHP5 en el foro de PHP en Foros del Web. Mi problema es que las sesiones duran lo que quieren y no se porqué. A veces me duran 20 min. y otras veces me duran ...
  #1 (permalink)  
Antiguo 23/10/2008, 02:24
 
Fecha de Ingreso: febrero-2008
Mensajes: 49
Antigüedad: 16 años, 2 meses
Puntos: 1
Sesiones en PHP5

Mi problema es que las sesiones duran lo que quieren y no se porqué. A veces me duran 20 min. y otras veces me duran mas de 4 horas.
Las variables de sesion me caducan antes de tiempo. Este es mi código (de pruebas, claro):
<?
//Inicia la sesion
session_start();

//Si tiene la sesión registrada, entonces...
if (isset($_SESSION['valid_user']))
{
echo "reconoce la sesión con sus valores. ";echo " eres: ";
echo $_SESSION['valid_user'];
echo "</b><p>";
}
else
{
echo "has perdido las variables de sesión, es increible<p>";
}



//Saca el id de sesión y el contador
echo ("Nuestra session ID es: <b>"); echo session_id();

echo "</b><p>Las variables de sesion las guardo en: <b>";
echo session_save_path();
echo "</b><p>La sesion se llama: <b>";
echo session_name();
echo "</b><p>La sesion (vida de la cookie) expira en: <b>";
echo session_cache_expire();
echo "</b><p>";
echo "</b><p>La sesion en la caché expira en: <b>";
echo session_cache_limiter();
echo "</b><p>";
echo "</b><p>parámetros de la cookie : ";
//echo session_get_cookie_params();
echo "<p>";
$yo = session_get_cookie_params();
echo "ruta: ";echo $yo['path'];echo "<br>";
echo "dominio: ";echo $yo['domain'];echo "<br>";
echo "seguridad: ";echo $yo['secure'];echo "<br>";
echo "vida en seg: ";echo $yo['lifetime'];echo "<br>";
echo "<p> valor de la cookie: ";
echo $_COOKIE["PHPSESSID"]; ;
echo "</b><p>";
?>
<html>
<head>
<title>Borja Pruebas
</title>

<body>
<a href=borja1.php>ir</a>

</body>
</html>

Alguien puede ayudarme?




Esta es mi configuración en php.ini:

[Session]
; Handler used to store/retrieve data.
session.save_handler = files

; Argument passed to save_handler. In the case of files, this is the path
; where data files are stored. Note: Windows users have to change this
; variable in order to use PHP's session functions.
;
; As of PHP 4.0.1, you can define the path as:
;
; session.save_path = "${path}\tmp\"

;
; where N is an integer. Instead of storing all the session files in
; /path, what this will do is use subdirectories N-levels deep, and
; store the session data in those directories. This is useful if you
; or your OS have problems with lots of files in one directory, and is
; a more efficient layout for servers that handle lots of sessions.
;
; NOTE 1: PHP will not create this directory structure automatically.
; You can use the script in the ext/session dir for that purpose.
; NOTE 2: See the section on garbage collection below if you choose to
; use subdirectories for session storage
;
; The file storage module creates files using mode 600 by default.
; You can change that by using
;
; session.save_path = "N;MODE;/path"
;
; where MODE is the octal representation of the mode. Note that this
; does not overwrite the process's umask.
session.save_path = "/tmp"

; Whether to use cookies.
session.use_cookies = 1

; This option enables administrators to make their users invulnerable to
; attacks which involve passing session ids in URLs; defaults to 0.
; session.use_only_cookies = 1

; Name of the session (used as cookie name).
session.name = PHPSESSID

; Initialize session on request startup.
session.auto_start = 0

; Lifetime in seconds of cookie or, if 0, until browser is restarted.
session.cookie_lifetime = 0

; The path for which the cookie is valid.
session.cookie_path = /

; The domain for which the cookie is valid.
session.cookie_domain =

; Handler used to serialize data. php is the standard serializer of PHP.
session.serialize_handler = php

; Define the probability that the 'garbage collection' process is started
; on every session initialization.
; The probability is calculated by using gc_probability/gc_divisor,
; e.g. 1/100 means there is a 1% chance that the GC process starts
; on each request.

session.gc_probability = 1
session.gc_divisor = 100

; After this number of seconds, stored data will be seen as 'garbage' and
; cleaned up by the garbage collection process.
session.gc_maxlifetime = 7200

; NOTE: If you are using the subdirectory option for storing session files
; (see session.save_path above), then garbage collection does *not*
; happen automatically. You will need to do your own garbage
; collection through a shell script, cron entry, or some other method.
; For example, the following script would is the equivalent of
; setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):
; cd /path/to/sessions; find -cmin +24 | xargs rm

; PHP 4.2 and less have an undocumented feature/bug that allows you to
; to initialize a session variable in the global scope, albeit register_globals
; is disabled. PHP 4.3 and later will warn you, if this feature is used.
; You can disable the feature and the warning separately. At this time,
; the warning is only displayed, if bug_compat_42 is enabled.

session.bug_compat_42 = 0
session.bug_compat_warn = 1

; Check HTTP Referer to invalidate externally stored URLs containing ids.
; HTTP_REFERER has to contain this substring for the session to be
; considered as valid.
session.referer_check =

; How many bytes to read from the file.
session.entropy_length = 0

; Specified here to create the session id.
session.entropy_file =

;session.entropy_length = 16

;session.entropy_file = /dev/urandom

; Set to {nocache,private,public,} to determine HTTP caching aspects
; or leave this empty to avoid sending anti-caching headers.
session.cache_limiter = nocache

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

; trans sid support is disabled by default.
; Use of trans sid may risk your users security.
; Use this option with caution.
; - User may send URL contains active session ID
; to other person via. email/irc/etc.
; - URL that contains active session ID may be stored
; in publically accessible computer.
; - User may access your site with the same session ID
; always using URL stored in browser's history or bookmarks.
session.use_trans_sid = 1

; Select a hash function
; 0: MD5 (128 bits)
; 1: SHA-1 (160 bits)
session.hash_function = 0

; Define how many bits are stored in each character when converting
; the binary hash data to something readable.
;
; 4 bits: 0-9, a-f
; 5 bits: 0-9, a-v
; 6 bits: 0-9, a-z, A-Z, "-", ","
session.hash_bits_per_character = 4

; 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=,fields et="
  #2 (permalink)  
Antiguo 23/10/2008, 04:39
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 18 años, 7 meses
Puntos: 19
Respuesta: Sesiones en PHP5

Dentro de tu código no eliminas la variable $_SESSION['valid_user'] en ningún sitio?
  #3 (permalink)  
Antiguo 23/10/2008, 05:15
 
Fecha de Ingreso: febrero-2008
Mensajes: 49
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Sesiones en PHP5

Gracias por responder.

No elimino la variable $_SESSION['valid_user'] en ningún sitio.
Es más, sólo tengo esa página y la actualizo.
El problema es que me elimina la variable de sesión de forma aleatoria.

Alguna sugerencia?
  #4 (permalink)  
Antiguo 23/10/2008, 05:18
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 18 años, 7 meses
Puntos: 19
Respuesta: Sesiones en PHP5

Si sólo tienes esta página, ¿dónde instancias $_SESSION['valid_user']?
  #5 (permalink)  
Antiguo 23/10/2008, 05:21
 
Fecha de Ingreso: febrero-2008
Mensajes: 49
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Sesiones en PHP5

No, me refiereo a que no salgo de esa página.

Instancio $_SESSION['valid_user'] en una anterior. Luego accedo a la página en cuestión, y me reconoce la variable. Eso sí, luego sin hacer nada la pierdo.
  #6 (permalink)  
Antiguo 23/10/2008, 05:23
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 18 años, 7 meses
Puntos: 19
Respuesta: Sesiones en PHP5

Dos cosas,

¿podrías mostrar lo que se muestra de esa página?

¿te pasa con diferentes navegadores?
  #7 (permalink)  
Antiguo 23/10/2008, 05:29
 
Fecha de Ingreso: febrero-2008
Mensajes: 49
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Sesiones en PHP5

Te pongo otra prueba que hago...

page1.php
<?
session_start();

$_SESSION['sess_var'] = "Borja";
$_SESSION['valid_user'] = "Borja 2";

echo 'El contenido de la $_SESSION[\'sess_var\'] es '.$_SESSION['sess_var'].'<br />';
echo 'El contenido de la $_SESSION[\'valid_user\'] es '.$_SESSION['valid_user'].'<br />';

echo 'ID de Sesión'.session_id();
echo '<br>';
?>

<a href="page2.php">Siguiente página</a><p>

Y en page2.php esto:

<?
session_start();

echo 'ID de Sesión'.session_id();
echo '<br>';
echo 'No elimino la variable de sesion valid_user.';
echo '<br>';
echo 'The content of $_SESSION[\'valid_user\'] is '.$_SESSION['valid_user'].'<br />';

?>

Y al acceder por el enlace, reconoce la variable de sesion.
Luego al pasar un tiempo (a veces pocos minutos, a veces horas) pierde la variable.

¿No tendrá que ver algo con la configuración de php5?

Gracias
  #8 (permalink)  
Antiguo 23/10/2008, 05:45
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 18 años, 7 meses
Puntos: 19
Respuesta: Sesiones en PHP5

Prueba poniendo

session.use_trans_sid = 0

Si no, ya no se me ocurre nada más.
  #9 (permalink)  
Antiguo 23/10/2008, 05:47
 
Fecha de Ingreso: febrero-2008
Mensajes: 49
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Sesiones en PHP5

Muchas gracias.

Lo pruebo
  #10 (permalink)  
Antiguo 23/10/2008, 12:10
 
Fecha de Ingreso: febrero-2008
Mensajes: 49
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Sesiones en PHP5

Nada. Estoy haciendo pruebas cambiando el php.ini
Con el gc_maxlifetime=60 me dura 1 min. Perfecto.
gc_maxlifetime=180 me dura 3 min. Perfecto.
gc_maxlifetime=300 no me llega a durar los 5 min. ¿Por qué?
No tengo ni idea y estoy mas que harto.
Me podría alguien echar una mano, POR FAVOR!!!!!!!!
Gracias
  #11 (permalink)  
Antiguo 23/10/2008, 12:21
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: Sesiones en PHP5

imorap... cómo vas??

Cómo quieres destruir tu sesión?? al cerrar el navegador?? por inactividad??

Al cerrar el navegador:
http://www.forosdelweb.com/f18/faqs-...ml#post2619525

Veo que tu php.ini no está así como dice el FAQ.

Por inactividad:
http://www.desarrolloweb.com/articulos/1991.php

Espero te sirva,

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #12 (permalink)  
Antiguo 23/10/2008, 12:30
 
Fecha de Ingreso: febrero-2008
Mensajes: 49
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Sesiones en PHP5

Este es el php.ini que tengo puesto ahora mismo:

[Session]
; Handler used to store/retrieve data.
session.save_handler = files

; Argument passed to save_handler. In the case of files, this is the path
; where data files are stored. Note: Windows users have to change this
; variable in order to use PHP's session functions.
;
; As of PHP 4.0.1, you can define the path as:
;
; session.save_path = "N;/path"
;
; where N is an integer. Instead of storing all the session files in
; /path, what this will do is use subdirectories N-levels deep, and
; store the session data in those directories. This is useful if you
; or your OS have problems with lots of files in one directory, and is
; a more efficient layout for servers that handle lots of sessions.
;
; NOTE 1: PHP will not create this directory structure automatically.
; You can use the script in the ext/session dir for that purpose.
; NOTE 2: See the section on garbage collection below if you choose to
; use subdirectories for session storage
;
; The file storage module creates files using mode 600 by default.
; You can change that by using
;
; session.save_path = "N;MODE;/path"
;
; where MODE is the octal representation of the mode. Note that this
; does not overwrite the process's umask.
;session.save_path = "/tmp"

; Whether to use cookies.
session.use_cookies = 1

; This option enables administrators to make their users invulnerable to
; attacks which involve passing session ids in URLs; defaults to 0.
; session.use_only_cookies = 1

; Name of the session (used as cookie name).
session.name = PHPSESSID

; Initialize session on request startup.
session.auto_start = 0

; Lifetime in seconds of cookie or, if 0, until browser is restarted.
session.cookie_lifetime = 0

; The path for which the cookie is valid.
session.cookie_path = /

; The domain for which the cookie is valid.
session.cookie_domain =

; Handler used to serialize data. php is the standard serializer of PHP.
session.serialize_handler = php

; Define the probability that the 'garbage collection' process is started
; on every session initialization.
; The probability is calculated by using gc_probability/gc_divisor,
; e.g. 1/100 means there is a 1% chance that the GC process starts
; on each request.

session.gc_probability = 100
session.gc_divisor = 100

; After this number of seconds, stored data will be seen as 'garbage' and
; cleaned up by the garbage collection process.
session.gc_maxlifetime = 300

; NOTE: If you are using the subdirectory option for storing session files
; (see session.save_path above), then garbage collection does *not*
; happen automatically. You will need to do your own garbage
; collection through a shell script, cron entry, or some other method.
; For example, the following script would is the equivalent of
; setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):
; cd /path/to/sessions; find -cmin +24 | xargs rm

; PHP 4.2 and less have an undocumented feature/bug that allows you to
; to initialize a session variable in the global scope, albeit register_globals
; is disabled. PHP 4.3 and later will warn you, if this feature is used.
; You can disable the feature and the warning separately. At this time,
; the warning is only displayed, if bug_compat_42 is enabled.

session.bug_compat_42 = 1
session.bug_compat_warn = 1

; Check HTTP Referer to invalidate externally stored URLs containing ids.
; HTTP_REFERER has to contain this substring for the session to be
; considered as valid.
session.referer_check =

; How many bytes to read from the file.
session.entropy_length = 0

; Specified here to create the session id.
session.entropy_file =

;session.entropy_length = 16

;session.entropy_file = /dev/urandom

; Set to {nocache,private,public,} to determine HTTP caching aspects
; or leave this empty to avoid sending anti-caching headers.
session.cache_limiter = nocache

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

; trans sid support is disabled by default.
; Use of trans sid may risk your users security.
; Use this option with caution.
; - User may send URL contains active session ID
; to other person via. email/irc/etc.
; - URL that contains active session ID may be stored
; in publically accessible computer.
; - User may access your site with the same session ID
; always using URL stored in browser's history or bookmarks.
session.use_trans_sid = 0

; Select a hash function
; 0: MD5 (128 bits)
; 1: SHA-1 (160 bits)
session.hash_function = 0

; Define how many bits are stored in each character when converting
; the binary hash data to something readable.
;
; 4 bits: 0-9, a-f
; 5 bits: 0-9, a-v
; 6 bits: 0-9, a-z, A-Z, "-", ","
session.hash_bits_per_character = 4

; 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=,fields et="

Y no me dura mas de 3 min. Sabeis porqué? Puede ser algo del servidor? Es que ya no se me ocurre nada.
  #13 (permalink)  
Antiguo 23/10/2008, 12:33
 
Fecha de Ingreso: febrero-2008
Mensajes: 49
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Sesiones en PHP5

Lo que me gustaría es que durara 5 horas y se destruyera por inactividad.
Pero el problema no es que no me cierre la sesión, es que me la cierra a los 3 min
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 00:10.