Foros del Web » Programando para Internet » PHP »

Variables de sesión en AppServ

Estas en el tema de Variables de sesión en AppServ en el foro de PHP en Foros del Web. Pues eso, como activo las variables de sesión en appserv? algun tutorial para novatos por ahi? Saludos!...
  #1 (permalink)  
Antiguo 14/09/2009, 01:24
 
Fecha de Ingreso: abril-2003
Ubicación: Santiago de Chile
Mensajes: 115
Antigüedad: 21 años
Puntos: 0
Pregunta Variables de sesión en AppServ

Pues eso, como activo las variables de sesión en appserv? algun tutorial para novatos por ahi?

Saludos!
__________________
~[ The Hard ]~
- Sólo sé que nada sé...
- Hay un placer en la locura, que sólo los locos conocen...
- ¿Trabajas para vivir, o vives para trabajar?
  #2 (permalink)  
Antiguo 14/09/2009, 01:25
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Variables de sesión en AppServ

Las variables de session son problema de PHP no del appserver. Ya estan disponibles en el core de PHP. Por lo tanto para activarlas solo necesitas una funcion
Código PHP:
Ver original 
Para mas informacion http://www.php.net/manual/en/book.session.php
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 15/09/2009, 20:08
 
Fecha de Ingreso: abril-2003
Ubicación: Santiago de Chile
Mensajes: 115
Antigüedad: 21 años
Puntos: 0
Respuesta: Variables de sesión en AppServ

Creo que no se me entendió la pregunta, me disculpo.

Lo que pasa es que con el APPSERV, al declarar variables de sessión (usando session_start(), etc), las variables simplemente no viajan al refrescar la página (haciendo un header('location'), o enviando un formulario, por ejemplo).

No sé si es un tema de configuración por defecto del php.ini para appserv, pero simplemente no lo he podido hacer funcionar. He revisado tutoriales y configuraciones, y phpinfo() me indica que tengo todo correctamente configurado.

Estoy empezando a sospechar que se trata de configuración de seguridad, de forma que el usuario que tenga levantado el servicio de apache no tiene acceso de escritura sobre alguna carpeta donde caigan las sesiones (como en IIS), o algo rebuscado como eso, pero no sé qué mas buscar.

Tengo un problema similar en el hosting en donde estoy haciendo mis pruebas (internet), por alguna razón las sessiones me duran un par de segundos, y luego las pierdo. Claro que este es otro problema, y no tiene nada que ver con APPSERV

Sugerencias? acepto cualquier consejo e/y/o/u ayuda :)

Saludos!
__________________
~[ The Hard ]~
- Sólo sé que nada sé...
- Hay un placer en la locura, que sólo los locos conocen...
- ¿Trabajas para vivir, o vives para trabajar?
  #4 (permalink)  
Antiguo 15/09/2009, 21:17
 
Fecha de Ingreso: julio-2009
Mensajes: 178
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: Variables de sesión en AppServ

para resilver eso en tu srver ve l php.ini y po en ON register_globals pero en cualkier server que ompre un domini lo mas seguro es ue este en off asi es que lo mejor es usar $_SESSION[' elnombrevariable']=$username; esto es para que sete la session
  #5 (permalink)  
Antiguo 15/09/2009, 21:18
 
Fecha de Ingreso: abril-2003
Ubicación: Santiago de Chile
Mensajes: 115
Antigüedad: 21 años
Puntos: 0
Si, estoy usando $_SESSION[], pero los valores se pierden... trataré de levantar un pequeño código para explicarme mejor.

Ok, a ver si nos entendemos... me hice esta pequeña página de prueba de sesiones, con formulario y todo, me gustaría si alguien se anima a discutirlo conmigo.

1. Después de conectarse, simulo verificación de usuario y dejo "logueado" al usuario, usando una variable de sesión para comprobar el estado.
2. En "Voy a hacer algo, sin errores", sólo simulo la ejecución de una acción, con una redirección. En este punto el comportamiento está Ok, sigo con las variables y sigo "logueado"
3. En "Voy a hacer algo, con errores", creo datos en un array, luego guardo ese array en una variable de sesión, y redirecciono. En este punto, por alguna razón, el valor del array no llega de vuelta, es aquí donde tengo el problema principalmente.
4. Finalmente, el logout, destruyo cualquier variable que pueda tener creada.

Este es el código, para quien quiera probarlo. Yo, como mencioné al principio, estoy probando con APPSERV, y las variables tienen un comportamiento raro. En un servidor web "X", las variables me duran como 3 segundos antes de desaparecer.

Código PHP:
<?php

// Indico que voy a usar sesiones
session_start();

// Veo si está ingresando

$b_logueado chequeoLogin();

// Si la variable de sesion a_msg vuelve con algo, la pongo en mi variable local
$a_msg = array();
if ( isset(
$_SESSION["a_msg"]) ) { $a_msg $_SESSION["a_msg"]; } else { $_SESSION["a_msg"] = array(); }

if ( isset(
$_POST["accion"]) ) { 
    
$accion $_POST["accion"];
} elseif ( isset(
$_GET["accion"]) ) {
    
$accion $_GET["accion"];
}

if ( 
$accion == "login" ) {
    
$usuario $_POST["usuario"];
    
$password $_POST["password"];

    
// Asumamos que aquí fuí a ver si estaba el usuario en una base de datos.
    // if ( !(buscaUsuario($usuario, $password)) ) { ... }

    // Creo las sessiones
    
    
$_SESSION["usuario"] = $usuario;
    
$_SESSION["password"] = $password;
    
$_SESSION["estado"] = 1// 1 = Conectado
    
    // Ok, ingresé correctamente, así que lo mando a la página de inicio de nuevo, para que ejecute chequeoLogin()
    
    
header("Location: " $_SERVER['PHP_SELF']);
    exit();        
// Para que no siga ejecutando el código

    //$a_msg[] = "Me conecté correctamente"; //Ojo, para mostrar este mensaje no estoy usando sesiones.

} elseif ( $accion == "sinerrores" ) {

    
// Asumamos que acá hago una consulta a la base de datos
    // if ( !(consultaEnorme() ) { echo "No encontré datos"; } else { echo "Muchos datos..."; }
    
    // Redirecciono después de esta acción, a la página de inicio. Ojo, aquí es donde pierdo las variables de sesión por alguna razón

    
header("Location: " $_SERVER['PHP_SELF']);
    exit();        
// Para que no siga ejecutando el código

} elseif ( $accion == "conerrores" ) {

    
// Asumamos que acá hago una consulta a la base de datos, y me devolvió un error, que quiero mostrar con sessiones
    // if ( !(consultaEnorme() ) { echo "No encontré datos"; } else { echo "Muchos datos..."; }
    
    
$a_msg[] = "Ha ocurrido un error, por lo que lo muestro en la página principal.";
    
    
// Redirecciono después de esta acción, a la página de inicio. Ojo, aquí es donde pierdo las variables de sesión por alguna razón
    // Ya que voy a redireccionar, lleno la variable de sesión con mis mensajes
    
    
if ( !(empty($a_msg)) ) { $_SESSION["a_msg"] = $a_msg; }
    
header("Location: " $_SERVER['PHP_SELF']);
    exit();        
// Para que no siga ejecutando el código

} elseif ( $accion == "logout" ) {

    unset(
$_SESSION["usuario"]);
    unset(
$_SESSION["password"]);
    unset(
$_SESSION["estado"]);
    unset(
$_SESSION["a_msg"]);
    
    
session_destroy();    // De una u otra forma...
    
    
header("Location: " $_SERVER['PHP_SELF']);
    exit();

}


function 
chequeoLogin() {

    if ( isset(
$_SESSION["estado"]) && $_SESSION["estado"] ) {
        return 
true;
    } else {
        return 
false;
    }

}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>formulario con sesiones</title>
</head>

<?php

    
if ( $a_msg ) { // Si volvió bien con mis errores desde la sesión, entonces los muestro.
        
echo "<h3>Han ocurrido algunos errores...</h3>\n";
        echo 
"<ul>\n";
        foreach ( 
$a_msg as $msg ) {
            echo 
"  <li>" $msg "</li>\n";
        }
        echo 
"</ul>\n";
    }
    unset (
$a_msg);
    unset (
$_SESSION["a_msg"]);
?>

<?php
    
if ( $b_logueado ) {
?>

    <h3>Bienvenido <?php echo $_SESSION["usuario"]; ?> !!! </h3>
    <p>Qu&eacute; quieres hacer ahora?</p>
    <ul>
        <li><a href="<?php echo $_SERVER['PHP_SELF'] . "?accion=sinerrores"?>">Voy a hacer <i>algo</i>, sin errores</a></li>
        <li><a href="<?php echo $_SERVER['PHP_SELF'] . "?accion=conerrores"?>">Voy a hacer <i>algo</i>, con errores</a></li>
        <li><a href="<?php echo $_SERVER['PHP_SELF'] . "?accion=logout"?>">Me aburr&iacute; me voy... (logout)</a></li>
    </ul>

<?php
    
} else {
?>

<form action="<?php $_SERVER["PHP_SELF"]; ?>" method="post" name="frmlogin">
<input name="accion" type="hidden" value="login" />
<table border="0" cellspacing="0" cellpadding="0" summary="BlaBla">
  <caption>
    Bienvenido! veamos quien eres...
  </caption>
  <tr>
    <td>Usuario</td>
    <td><input name="usuario" type="text" value="<?php echo $_SESSION["usuario"]; ?>" size="25" maxlength="15" /></td>
  </tr>
  <tr>
    <td>Contrase&ntilde;a</td>
    <td><input name="password" type="password" value="<?php echo $_SESSION["password"]; ?>" size="25" maxlength="15" /></td>
  </tr>
  <tr>
    <td align="right" colspan="2"><input type="submit" /></td>
  </tr>
</table>
</form>
<?php
    
}
?>

<body>
</body>
</html>
Bueno, eso... ojalá y alguien quiera discutir esto conmigo.

Saludos!

Update: Acabo de crear un sitio en 000webhost.com (no la conocía, por cierto), y aquí me funciona el tema! pueden chequearlo aquí http://cnavarroh.comlu.com/frmsesion.php... tendrá algo especial en la configuración del php? http://cnavarroh.comlu.com/phpinfo.php
__________________
~[ The Hard ]~
- Sólo sé que nada sé...
- Hay un placer en la locura, que sólo los locos conocen...
- ¿Trabajas para vivir, o vives para trabajar?

Última edición por GatorV; 16/09/2009 a las 14:06
  #6 (permalink)  
Antiguo 16/09/2009, 01:22
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Variables de sesión en AppServ

Verifica en tu php.ini el session.cookie_lifetime. El valor que tenga declarado esta en segundos. Si no quieres que se pierda la sesion hasta que el navegador este cerrado tienes que declararlo con 0. Para mas información http://php.net/session.cookie-lifetime
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 17/09/2009, 07:52
 
Fecha de Ingreso: abril-2003
Ubicación: Santiago de Chile
Mensajes: 115
Antigüedad: 21 años
Puntos: 0
Respuesta: Variables de sesión en AppServ

En todos los sitios donde he probado la página que puse arriba, el valor de cookie_lifetime está en 0, lo que quiere decir según la documentación que no tiene límite.

Sigo insistiendo en que el problema va más por el tema del manejo de archivos temporales de php, pero no he podido encontrar documentación al respecto.
__________________
~[ The Hard ]~
- Sólo sé que nada sé...
- Hay un placer en la locura, que sólo los locos conocen...
- ¿Trabajas para vivir, o vives para trabajar?
  #8 (permalink)  
Antiguo 17/09/2009, 08:56
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Variables de sesión en AppServ

Es probable que tu navegador no acepte la cookie de sesión, por lo que al redirigir por header() vas a tener que pasar manualemente el identificador de sesión usando la constante SID:

Código PHP:
Ver original
  1. header('Location: archivo.php?' . SID);

Saludos.
  #9 (permalink)  
Antiguo 21/09/2009, 06:01
 
Fecha de Ingreso: abril-2003
Ubicación: Santiago de Chile
Mensajes: 115
Antigüedad: 21 años
Puntos: 0
Respuesta: Variables de sesión en AppServ

Ya encontré el problema que tenía, lo que pasaba es que appserv deja REGISTER_GLOBALS activado. Lo dejé en OFF y se solucionó mi problema. Gracias!
__________________
~[ The Hard ]~
- Sólo sé que nada sé...
- Hay un placer en la locura, que sólo los locos conocen...
- ¿Trabajas para vivir, o vives para trabajar?
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 01:57.