FAQ
Hola lista:
Estoy trabajando con sesiones en un sitio en el cual se navega a traves de SSL. Entonces me he dado cuenta de una cosa y es que cada x minutos o segundos, no les podria especificar el rango exacto, se me crea una nueva sesion. Estoy trabajando sobre Windows XP SP2, Apache 2.0.55 SSL, PHP 5.1.2 y probando las cosas con Firefox 1.5. No se el porque de esto porque por mas que he mirado mi codigo solo inicio sesion una sola vez. O sea, tengo un script llamado set_app.php que es el que se encarga de configurar todas las cosas (objetos AdoDB, objeto Smarty, inicio de sesiones). Mas o menos es este el codigo:

PHP:
----
<?
session_start();
include_once('config.inc.php');
require_once('smarty/Smarty.class.php');
require_once('smarty/SmartyValidate.class.php');
require_once('adodb/adodb.inc.php');
$tpl = new Smarty;
$tpl->template_dir = TEMPLATES_DIR_PORTAL;
$tpl->compile_dir = TEMPLATES_DIR_PORTAL . COMPILE_DIR;
$tpl->config_dir = TEMPLATES_DIR_PORTAL . THEME_CONFIG;
$tpl->compile_check = COMPILE_CHECK;
try {
$db = ADONewConnection(DATABASE_TYPE);
$db->Connect(DATABASE_SERVER, DATABASE_USER, DATABASE_PASSWORD, DATABASE_NAME);
$db->debug = DEBUG_QUERY;
} catch (exception $error){
echo "<pre>";
print_r($error);
echo "</pre>";
die();
}
?>

Como verán no tiene nada del otro mundo. Ahora en todos los ficheros de mi app lo que hago es lo siguiente:

PHP:
----
<?
include_once('set_app.php');
?>

Entonces que es lo que hago mal? Tiene esto algo que ver con el SSL?

Salu2
ReynierPM
4to. año Ing. Informática
Usuario registrado de Linux: #310201
*************************************************************************
El programador superhéroe aprende de compartir sus conocimientos.
Es el referente de sus compañeros. Todo el mundo va a preguntarle y él, secretamente, lo fomenta porque es así como adquiere su legendaria
sabiduría: escuchando ayudando a los demás...

Search Discussions

  • carlos Medina at Jan 31, 2006 at 8:41 am
    Hola Raynier,

    siempre que haces el include a una pagina que comienza con
    session_start(); la maquina no hace otra cosa (logico) que comenzar con
    una nueva session...
    en vez de comenzar con la session prueba primero si existe una ya:
    por ejemplo con
    if (!session_id($como_sea_llamada_la_session)){
    session_start();}
    else{
    $no hago nada;}

    o algo por el estilo. Lo mejor es que le des a la session un nombre
    propio y la pongas con los valores que necesites para que la tengas bajo
    tu controll

    Saludos

    Carlos


    Reynier Perez Mira wrote:
    Hola lista:
    Estoy trabajando con sesiones en un sitio en el cual se navega a traves de SSL. Entonces me he dado cuenta de una cosa y es que cada x minutos o segundos, no les podria especificar el rango exacto, se me crea una nueva sesion. Estoy trabajando sobre Windows XP SP2, Apache 2.0.55 SSL, PHP 5.1.2 y probando las cosas con Firefox 1.5. No se el porque de esto porque por mas que he mirado mi codigo solo inicio sesion una sola vez. O sea, tengo un script llamado set_app.php que es el que se encarga de configurar todas las cosas (objetos AdoDB, objeto Smarty, inicio de sesiones). Mas o menos es este el codigo:

    PHP:
    ----
    <?
    session_start();
    include_once('config.inc.php');
    require_once('smarty/Smarty.class.php');
    require_once('smarty/SmartyValidate.class.php');
    require_once('adodb/adodb.inc.php');
    $tpl = new Smarty;
    $tpl->template_dir = TEMPLATES_DIR_PORTAL;
    $tpl->compile_dir = TEMPLATES_DIR_PORTAL . COMPILE_DIR;
    $tpl->config_dir = TEMPLATES_DIR_PORTAL . THEME_CONFIG;
    $tpl->compile_check = COMPILE_CHECK;
    try {
    $db = ADONewConnection(DATABASE_TYPE);
    $db->Connect(DATABASE_SERVER, DATABASE_USER, DATABASE_PASSWORD, DATABASE_NAME);
    $db->debug = DEBUG_QUERY;
    } catch (exception $error){
    echo "<pre>";
    print_r($error);
    echo "</pre>";
    die();
    }
    ?>

    Como verán no tiene nada del otro mundo. Ahora en todos los ficheros de mi app lo que hago es lo siguiente:

    PHP:
    ----
    <?
    include_once('set_app.php');
    ?>

    Entonces que es lo que hago mal? Tiene esto algo que ver con el SSL?

    Salu2
    ReynierPM
    4to. año Ing. Informática
    Usuario registrado de Linux: #310201
    *************************************************************************
    El programador superhéroe aprende de compartir sus conocimientos.
    Es el referente de sus compañeros. Todo el mundo va a preguntarle y él, secretamente, lo fomenta porque es así como adquiere su legendaria
    sabiduría: escuchando ayudando a los demás...
  • Gustavo Pardo at Jan 31, 2006 at 12:50 pm

    El Mar 31 Ene 2006 05:41, carlos Medina escribió:
    Hola Raynier,

    siempre que haces el include a una pagina que comienza con
    session_start(); la maquina no hace otra cosa (logico) que comenzar con
    una nueva session...
    hola carlos,
    tomado del manual:
    session_start() crea una sesión (o la continúa basandose en el session id
    pasado por GET o mediante una cookie).

    me fui al manual porque todas mis páginas arrancan con session_start(), y esta
    comienza una nueva session sólo en el caso de que no existiera, si existe la
    continúa.
    en vez de comenzar con la session prueba primero si existe una ya:
    por ejemplo con
    if (!session_id($como_sea_llamada_la_session)){
    session_start();}
    else{
    $no hago nada;}

    o algo por el estilo. Lo mejor es que le des a la session un nombre
    propio y la pongas con los valores que necesites para que la tengas bajo
    tu controll
    saludos.
  • carlos Medina at Jan 31, 2006 at 1:27 pm
    Hola Gustavo,
    gracias por tu aporte. Pienso luego que segun el manual:

    "session_start() crea una sesió (o la continúa basandose en el session
    id pasado por GET o mediante una cookie)."

    En el caso de Raynier debe haber un modificador que no le permite a la
    sesion de instanciar la sesion antigua. Yo uso el metodo de probar
    manualmente la sesion para estar seguro de que no ha cambiado (ni me la
    han cambiado). Mira esta sesion:

    class session
    {
    var $resource;
    function session( $options )
    {
    $this->error = ( bool )false;
    $this->sh_sid = $options['sh_sid'];
    $this->db['host'] = $options['host'];
    $this->db['user'] = $options['user'];
    $this->db['pass'] = $options['pass'];
    $this->db['dbas'] = $options['dbas'];
    $this->db['ss_table'] = $options['db_ss_table'];
    $this->db['id_field'] = $options['db_id_field'];
    $this->db['ex_field'] = $options['db_ex_field'];
    $this->db['dt_field'] = $options['db_dt_field'];
    $this->db['connection'] = $options['db_connection'];
    $this->sess['expire'] = $options['sess_expire'];
    $this->sess['name'] = $options['sess_name'];
    $this->sess['cookies'] = $options['sess_use_cookies'];
    $this->sess['only_cookies'] = $options['sess_only_cookies'];
    $this->sess['probability'] = $options['sess_probability'];
    $this->sess['sid_len'] = $options['sess_len'];
    $this->set_ini();

    session_set_save_handler( array( &$this, 'open' ),
    array( &$this, 'close' ),
    array( &$this, 'read' ),
    array( &$this, 'write' ),
    array( &$this, 'destroy' ),
    array( &$this, 'gc' ) );

    if ( isset($_GET['NEW_DMSESS']) ) {
    session_id($_GET['NEW_DMSESS']);
    session_start();
    } else if ( ( !isset( $_REQUEST[$this->sess['name']] ) )
    && ( $this->sh_sid ) ) {

    session_id( $this->new_sid() );
    session_start();

    [...]

    saludos

    Carlos


    Gustavo Pardo wrote:
    El Mar 31 Ene 2006 05:41, carlos Medina escribió:
    Hola Raynier,

    siempre que haces el include a una pagina que comienza con
    session_start(); la maquina no hace otra cosa (logico) que comenzar con
    una nueva session...

    hola carlos,
    tomado del manual:
    session_start() crea una sesión (o la continúa basandose en el session id
    pasado por GET o mediante una cookie).

    me fui al manual porque todas mis páginas arrancan con session_start(), y esta
    comienza una nueva session sólo en el caso de que no existiera, si existe la
    continúa.

    en vez de comenzar con la session prueba primero si existe una ya:
    por ejemplo con
    if (!session_id($como_sea_llamada_la_session)){
    session_start();}
    else{
    $no hago nada;}

    o algo por el estilo. Lo mejor es que le des a la session un nombre
    propio y la pongas con los valores que necesites para que la tengas bajo
    tu controll

    saludos.
  • Gustavo Pardo at Jan 31, 2006 at 2:19 pm

    El Mar 31 Ene 2006 10:27, carlos Medina escribió:
    Hola Gustavo,
    gracias por tu aporte. Pienso luego que segun el manual:

    "session_start() crea una sesió (o la continúa basandose en el session
    id pasado por GET o mediante una cookie)."

    En el caso de Raynier debe haber un modificador que no le permite a la
    sesion de instanciar la sesion antigua. Yo uso el metodo de probar
    seee, ahí no dije nada porque no se me ocurre qué pueda llegar a ser.
    manualmente la sesion para estar seguro de que no ha cambiado (ni me la
    han cambiado). Mira esta sesion:

    class session
    {
    var $resource;
    function session( $options )
    {
    $this->error = ( bool )false;
    $this->sh_sid = $options['sh_sid'];
    $this->db['host'] = $options['host'];
    $this->db['user'] = $options['user'];
    $this->db['pass'] = $options['pass'];
    $this->db['dbas'] = $options['dbas'];
    $this->db['ss_table'] = $options['db_ss_table'];
    $this->db['id_field'] = $options['db_id_field'];
    $this->db['ex_field'] = $options['db_ex_field'];
    $this->db['dt_field'] = $options['db_dt_field'];
    $this->db['connection'] = $options['db_connection'];
    $this->sess['expire'] = $options['sess_expire'];
    $this->sess['name'] = $options['sess_name'];
    $this->sess['cookies'] = $options['sess_use_cookies'];
    $this->sess['only_cookies'] = $options['sess_only_cookies'];
    $this->sess['probability'] = $options['sess_probability'];
    $this->sess['sid_len'] = $options['sess_len'];
    $this->set_ini();

    session_set_save_handler( array( &$this, 'open' ),
    array( &$this, 'close' ),
    array( &$this, 'read' ),
    array( &$this, 'write' ),
    array( &$this, 'destroy' ),
    array( &$this, 'gc' ) );

    if ( isset($_GET['NEW_DMSESS']) ) {
    session_id($_GET['NEW_DMSESS']);
    session_start();
    } else if ( ( !isset( $_REQUEST[$this->sess['name']] ) )
    && ( $this->sh_sid ) ) {

    session_id( $this->new_sid() );
    session_start();

    [...]
    curiosidad nomás :) ¿qué le pasás como $options?
    saludos

    Carlos
  • carlos Medina at Jan 31, 2006 at 2:30 pm
    Hola Gustavo,

    Le paso un array con los valores que necesita la funcion ;-)

    Saludos

    Carlos


    Gustavo Pardo wrote:
    El Mar 31 Ene 2006 10:27, carlos Medina escribió:
    Hola Gustavo,
    gracias por tu aporte. Pienso luego que segun el manual:

    "session_start() crea una sesió (o la continúa basandose en el session
    id pasado por GET o mediante una cookie)."

    En el caso de Raynier debe haber un modificador que no le permite a la
    sesion de instanciar la sesion antigua. Yo uso el metodo de probar

    seee, ahí no dije nada porque no se me ocurre qué pueda llegar a ser.

    manualmente la sesion para estar seguro de que no ha cambiado (ni me la
    han cambiado). Mira esta sesion:

    class session
    {
    var $resource;
    function session( $options )
    {
    $this->error = ( bool )false;
    $this->sh_sid = $options['sh_sid'];
    $this->db['host'] = $options['host'];
    $this->db['user'] = $options['user'];
    $this->db['pass'] = $options['pass'];
    $this->db['dbas'] = $options['dbas'];
    $this->db['ss_table'] = $options['db_ss_table'];
    $this->db['id_field'] = $options['db_id_field'];
    $this->db['ex_field'] = $options['db_ex_field'];
    $this->db['dt_field'] = $options['db_dt_field'];
    $this->db['connection'] = $options['db_connection'];
    $this->sess['expire'] = $options['sess_expire'];
    $this->sess['name'] = $options['sess_name'];
    $this->sess['cookies'] = $options['sess_use_cookies'];
    $this->sess['only_cookies'] = $options['sess_only_cookies'];
    $this->sess['probability'] = $options['sess_probability'];
    $this->sess['sid_len'] = $options['sess_len'];
    $this->set_ini();

    session_set_save_handler( array( &$this, 'open' ),
    array( &$this, 'close' ),
    array( &$this, 'read' ),
    array( &$this, 'write' ),
    array( &$this, 'destroy' ),
    array( &$this, 'gc' ) );

    if ( isset($_GET['NEW_DMSESS']) ) {
    session_id($_GET['NEW_DMSESS']);
    session_start();
    } else if ( ( !isset( $_REQUEST[$this->sess['name']] ) )
    && ( $this->sh_sid ) ) {

    session_id( $this->new_sid() );
    session_start();

    [...]

    curiosidad nomás :) ¿qué le pasás como $options?

    saludos

    Carlos
  • Gustavo Pardo at Jan 31, 2006 at 2:36 pm

    El Mar 31 Ene 2006 11:30, carlos Medina escribió:
    Hola Gustavo,

    Le paso un array con los valores que necesita la funcion ;-)
    ok, pero lo hacés a mano, pensaba que tal vez hubiera alguna función que te
    entregue el array armadito? :)
    Saludos

    Carlos
    --
    Gustavo Pardo
    http://drupaleros.com.ar/
  • carlos Medina at Jan 31, 2006 at 2:40 pm
    Pues claro =)

    Gustavo Pardo wrote:
    El Mar 31 Ene 2006 11:30, carlos Medina escribió:
    Hola Gustavo,

    Le paso un array con los valores que necesita la funcion ;-)

    ok, pero lo hacés a mano, pensaba que tal vez hubiera alguna función que te
    entregue el array armadito? :)

    Saludos

    Carlos
  • Reynier Perez Mira at Jan 31, 2006 at 1:21 pm
    Bueno me parece que este POST se me esta conviertiendo un poco en OFF TOPIC. Si lo creen así disculpenme. Carlos, gracias por tu respuesta pero como bien dice Gustavo eso es lo que tenía entendido hasta ahora por sesiones, o sea, cuando se inicia una esta no se destruye hasta:
    1) El navegador o la pagina en la cual se esta navegando no sea cerrada
    2) El programador la destruye en el código por "x" motivo
    3) La página esta inactiva por "X" tiempo y entonces las variables de configuracion en el php.ini (session.gc_maxlifetime, session.cookie_lifetime, session.cache_expire)

    Ahora mi problema me he dado cuenta que no es ese. Ahora las variables de sesion se crean solas. O sea, sin tener abierto ningun navegador y andar trabajando con la pagina. Estoy pensando si esto tiene algo que ver con el PHP o con el Apache montado sobre Windows XP SP2. Estoy trabajando con:
    * PHP 5.1.2
    * Apache/2.0.55 (Win32) mod_ssl/2.0.49 OpenSSL/0.9.8a
    * Windows XP SP2

    He revisado los logs de error de Apache y me he encontrado esto:

    [Mon Jan 30 23:58:57 2006] [notice] Parent: child process exited with status 3221225477 -- Restarting.
    [Mon Jan 30 23:59:01 2006] [notice] Apache/2.0.55 (Win32) mod_ssl/2.0.49 OpenSSL/0.9.8a PHP/5.1.2 configured -- resuming normal operations
    [Mon Jan 30 23:59:01 2006] [notice] Server built: Oct 9 2005 19:16:56
    [Mon Jan 30 23:59:01 2006] [notice] Parent: Created child process 3524
    [Mon Jan 30 23:59:03 2006] [warn] Init: Session Cache is not configured [hint: SSLSessionCache]
    [Mon Jan 30 23:59:04 2006] [notice] Child 3524: Child process is running
    [Mon Jan 30 23:59:04 2006] [notice] Child 3524: Acquired the start mutex.
    [Mon Jan 30 23:59:04 2006] [notice] Child 3524: Starting 250 worker threads.

    Ese "Session Cache is not configured" tendrá algo que ver? Es primera vez que me pasa ese comportamiento con PHP 5.1.2. Antes lo tenia montado sobre Windows 2003 Enterprise Server y o no me fije o no lo hacía.

    ¿Alguna sugerencia?

    Salu2
    ReynierPM
    4to. año Ing. Informática
    Usuario registrado de Linux: #310201
    *************************************************************************
    El programador superhéroe aprende de compartir sus conocimientos.
    Es el referente de sus compañeros. Todo el mundo va a preguntarle y él, secretamente, lo fomenta porque es así como adquiere su legendaria
    sabiduría: escuchando ayudando a los demás...
  • carlos Medina at Jan 31, 2006 at 2:08 pm
    Hola Raynier,
    Bueno me parece que este POST se me esta conviertiendo un poco en OFF TOPIC.[...]
    Bueno no creo Raynier :-)
    Ahora mi problema me he dado cuenta que no es ese. Ahora las variables de sesion se crean solas. O sea, sin tener abierto ningun navegador
    y andar trabajando con la pagina.[...]

    como que se generan solas?. Lametablemente no te entiendo es este punto
    He revisado los logs de error de Apache y me he encontrado esto:

    [Mon Jan 30 23:58:57 2006] [notice] Parent: child process exited with status 3221225477 -- Restarting.
    [Mon Jan 30 23:59:01 2006] [notice] Apache/2.0.55 (Win32) mod_ssl/2.0.49 OpenSSL/0.9.8a PHP/5.1.2 configured -- resuming normal operations
    [Mon Jan 30 23:59:01 2006] [notice] Server built: Oct 9 2005 19:16:56
    [Mon Jan 30 23:59:01 2006] [notice] Parent: Created child process 3524
    [Mon Jan 30 23:59:03 2006] [warn] Init: Session Cache is not configured [hint: SSLSessionCache]
    [Mon Jan 30 23:59:04 2006] [notice] Child 3524: Child process is running
    [Mon Jan 30 23:59:04 2006] [notice] Child 3524: Acquired the start mutex.
    [Mon Jan 30 23:59:04 2006] [notice] Child 3524: Starting 250 worker threads.

    Ese "Session Cache is not configured" tendrá algo que ver?[...]
    Bueno Raynier no tengo mucha informacion sobre esa directiva.

    saludos

    Carlos
  • Reynier Perez Mira at Jan 31, 2006 at 2:16 pm
    Hola Carlos y demas:
    Bueno si dices que no se está convirtiendo en OFF TOPIC entonces seguimos con el hilo de la discusion. Cuando digo que se están creando solas me refiero a que no tengo ningun navegador abierto, por lo que no estoy navegando la pagina ni nada por el estilo. Simplemente me he parado sobre el directorio "sessiondata" y cada "x" segundos, no sabria especificar, se me crea una variable de sesion. No se si sean problemas en mi php.ini
    php.ini
    ----------
    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 = 100
    session.gc_maxlifetime = 1440
    session.bug_compat_42 = 1
    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
    session.cache_expire = 180
    session.use_trans_sid = 0
    session.hash_function = 0
    session.hash_bits_per_character = 4
    url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fieldset="
    session.save_path= D:\Server\PHP\sessiondata ; argument passed to save_handler

    Salu2
    ReynierPM
    4to. año Ing. Informática
    Usuario registrado de Linux: #310201
    *************************************************************************
    El programador superhéroe aprende de compartir sus conocimientos.
    Es el referente de sus compañeros. Todo el mundo va a preguntarle y él, secretamente, lo fomenta porque es así como adquiere su legendaria
    sabiduría: escuchando ayudando a los demás...
  • carlos Medina at Jan 31, 2006 at 2:32 pm
    Hola Raynier,

    pues si se te "crean solas", es decir de manera "fantasmagorica" :-D
    entonces estoy pensando que algun colega del trabajo esta mirando la
    pagina mientras trabajas ;-)

    Pero en serio no se me ocurre nada.


    Saludos

    Carlos

    Reynier Perez Mira wrote:
    Hola Carlos y demas:
    Bueno si dices que no se está convirtiendo en OFF TOPIC entonces seguimos con el hilo de la discusion. Cuando digo que se están creando solas me refiero a que no tengo ningun navegador abierto, por lo que no estoy navegando la pagina ni nada por el estilo. Simplemente me he parado sobre el directorio "sessiondata" y cada "x" segundos, no sabria especificar, se me crea una variable de sesion. No se si sean problemas en mi php.ini
    php.ini
    ----------
    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 = 100
    session.gc_maxlifetime = 1440
    session.bug_compat_42 = 1
    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
    session.cache_expire = 180
    session.use_trans_sid = 0
    session.hash_function = 0
    session.hash_bits_per_character = 4
    url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fieldset="
    session.save_path= D:\Server\PHP\sessiondata ; argument passed to save_handler

    Salu2
    ReynierPM
    4to. año Ing. Informática
    Usuario registrado de Linux: #310201
    *************************************************************************
    El programador superhéroe aprende de compartir sus conocimientos.
    Es el referente de sus compañeros. Todo el mundo va a preguntarle y él, secretamente, lo fomenta porque es así como adquiere su legendaria
    sabiduría: escuchando ayudando a los demás...

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupphp-general-es @
categoriesphp
postedJan 31, '06 at 2:07a
activeJan 31, '06 at 2:40p
posts12
users3
websitephp.net

People

Translate

site design / logo © 2023 Grokbase