Foros del Web » Programando para Internet » PHP »

sesion me toma en una pagina y en otra no

Estas en el tema de sesion me toma en una pagina y en otra no en el foro de PHP en Foros del Web. Buenas, tengo un problema de sesion...me he guiado con el autentificador de Cluster ... para tener una idea simplifico mi codigo: ejemplo de index Código ...
  #1 (permalink)  
Antiguo 16/03/2004, 07:50
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 21 años, 9 meses
Puntos: 0
sesion me toma en una pagina y en otra no

Buenas,
tengo un problema de sesion...me he guiado con el autentificador de Cluster ... para tener una idea simplifico mi codigo:
ejemplo de index

Código PHP:
<?php
#$file corresponde al nombre de la pagina
if (is_file($file."php")){
   include 
"$file.php";
}
else{
    
#mostrar un principal.php que es la pagina q muestra sino encuentra nada
}

?>
ahora por ejemplo si $file fuese ingresar, entraria a ingresar.php
y dentro de ello tengo un

Código PHP:
<?php
include "header";
#aqui todo lo q tiene q mostrar de acuerdo a la pagina"
include "footer";
?>
en el header esta el menu donde aparace el formulario donde el usuario se logea...
es decir, si me estra mostrando el index.php y aparece el formulario el usuario coloca los datos estos van a otra pagina (validacion.php) donde se validan y vuelven al index.php, ahi desaparece el formulario y me queda la opcion de deslogeo,
pero ahora si quiero entrar a la pagina index.php?file=ingresar
aqui se pierde la sesion y me vuelve a aparecer el formulario!!
y no entiendo pq!!
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
  #2 (permalink)  
Antiguo 16/03/2004, 08:11
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Supongo que en tu header.php tienes un session_start() . función inspresindible para usar a posteriori las sesiones ($_SESSION .. etc) ..

Si es así .. recuerda que para acceder a variables de sesión -siempre- debes indicar su uso con la función session_start() donde realmente requieras usar sesiones .. (ademas de preocuparte de propagar el SID ..cosa que parece que dejas a PHP que lo haga en cookies o por otros médios).

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 16/03/2004, 08:21
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 21 años, 9 meses
Puntos: 0
gracias Cluster..
mira justamente como dices en el header.php es donde (al comienzo ) tengo el session_start()
la verdad q nose como propagar la sesion.. pense q poniendo session_start() al comienzo podria leer las variables y no me las toma... no quiero trabajar con cookie, para evitar aquellos q las tienen bloqueadas!
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
  #4 (permalink)  
Antiguo 16/03/2004, 08:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues .. lo primero que debes saber es todo lo referente al SID y como propagarlo . sino, ahora mismo estarás propagando el SID en cookies tal vez y no te has enterado (por qué tu navegador las aceta tal vez ... o bien los fallos que tienes son por eso mismo .. PHP programa el SID en cookies y tu navegador no las acepta ..)

En resumen .. revisa:

www.php.net/session

Y usa el buscador del foro que .. constantemente se habla sobre el termino del "SID" y las directivas del php.ini que influyen en el.

También podrias poner el ejemplo completo de uso (con los archivos "include" que uses por medio y su código para verlo en su contexto .. tal vez te estás dejando algún session_start() y .. así de paso se vé como propagas el SID.. aunque si no sabes ni que es (de momento) es más que probable que no lo estés usando ..)

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 16/03/2004, 08:36
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 21 años, 9 meses
Puntos: 0
he revisado varias informacion del SID incluso la que estan en la faq (y varios temas q aparecen en la busqueda ya que las sesiones es un tema recurrente), pense q seria similar a la cookie es decir las cookie las podia capturar desde cualquier pagina.. pero ahora quise trabajarla con sesiones...
voy analizar nuevamente el SID y donde explique su propagacion y ademas tratare de simplificar mi codigo para mostrarlo, pq si lo coloco completo tornara muy aburrido!!
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
  #6 (permalink)  
Antiguo 16/03/2004, 09:02
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Bueno .. la "teoría" de sesiones es simple pero hay que concerla ..

1) Iniciar el uso de sesiones siempre que se quiera acceder a una variable de sesión (session_start() .. podría ser por php.ini también con su session.auto_start, pero es recomendable usar las sesiones donde realmente se usen y no forzar a toda aplicación que corra en ese servidor a inicar una sesión que tal vez no se use).

2) Técnicas de propagación del SID. (por el URL o cookies y si fuese por el URL de forma automática o manual)

3) Funciones/métodos para registrar variables de sesión y leer su valor (desde el inseguro (pero compatibles con versiones inferiores de PHP a la 4.1.0) session_register() hasta los arrays superglobales $_SESSION (que són independientes de la configuración de register_globals de php.ini pero sólo validas desde PHP 4.1.0 en adelante).

Como te comenté .. la configuración de php al respecto es -muyyy importante- así que es necesario partir por conocer que configuración usas sobre sesiones para saber como van a trabajar y si lo requieres modificas la configuración para trabajar con sesiones a tu modo, lo cual implicará usar unas u otras técnicas (sobre todo el hecho de no querer propagar el SID en cookies te va a obligar a propagarlo a mano o dejar que PHP lo incruste en todo link, formulario .. etc.). Revisa tambien los problemas que hay de seguridad al propagar el SID por el URL.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 16/03/2004, 09:41
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 21 años, 9 meses
Puntos: 0
Cluster...tengo una duda.. yo probe tu autentificador y haces recuperacion de las sesiones en paginas distintas por ejemplo en la pagina de ingreso de usuarios o bien la principal... por lo tango si tu autentificador funciona bien en distintas paginas quiere decir que el SID se esta propagando o no?
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
  #8 (permalink)  
Antiguo 16/03/2004, 09:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Si, Autentificator asume que se propaga el SID en cookies. Si te funcinoa es por qué usas configuración de PHP:

session.use_cookies = ON (o 1)

y además usas un navegador que acepta cookies

Si no acepta cookies el SID fallará cuando haga un header("location: ...") (se perderá) mientras que un paso de una pagina a otra por un link o formulario si usas: session.use_trans_sid = ON (o 1) se propagará el SID correctamente (lo verasn en el URL como aquí en el foro .. o en un campo hidden si usas un formulario por ejemplo).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 16/03/2004, 09:49
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 21 años, 9 meses
Puntos: 0
por lo tanto si te funciona tu autentificador el mio (que tiene un tratamiento basado en el tuyo) deberia tomar tambien... y cuando quiero ver otra pagina es como si se destruyera la sesion pq denuevo me aparece el formulario....
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
  #10 (permalink)  
Antiguo 16/03/2004, 11:48
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues .. ya te he comentado .. si no pones el código sólo me queda recomendarte que veas donde usas el session_start() .. por qué si tienes la configuración de PHP mencionada (usas cookies para propagar el SID) .. y un navegador que acepte cookies, .. por el tema del SID (y su propagación) no es tanto el problema .. más bien "parece" que en algún proceso/script de tu sistema no estás usando session_start() ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 16/03/2004, 13:22
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 21 años, 9 meses
Puntos: 0
bueno cluster ahora pongo mi codigo:
index.php
Código PHP:
<?php
if (empty($file)) {
include 
"arriba.php";
include (
"principal.php");
include 
"abajo.php";
}
else {
  
$arch_concat "src/$file.php";       
  if (
is_file($arch_concat)) {
      if (
is_file("lenguaje/$file.php")){
      include 
"lenguaje/$file.php";
       }              
      include (
$arch_concat);
  }
  else {
      include 
"arriba.php";
      include 
"principal.php";
      include 
"abajo.php";
  }
 }
?>

arriba.php
Código PHP:
<?php
session_start
();
#aqui lo puse para ver en el title la session
echo "<html>"
    
."<head><title>".$HTTP_SESSION_VARS['usuario_run']."</title>"
    
."</head>";
echo 
"<link rel=\"stylesheet\" href=\"style.css\" type=\"text/css\">";
echo 
"<body>";
echo 
""
    
."<table width=750 align=center cellspacing=\"0\" cellpadding=\"0\">"
    
."<tr>"
    
."<td>";
echo 
"<table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" >"
    
."<tr><td>";
//echo $HTTP_SESSION_VARS['usuario_run']."--";
echo "<img src=images/top.jpg border=0>";
echo 
"</td></tr>"
    
."</table>";
    
echo 
"</td>"
    
."</tr>"
    
."<tr>" #central
    
."<td>"
    
."<table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=0 class=\"fondo_abajo\">"
    
."<tr>"
     
."<td width=169 class=\"td_menu\" valign=\"top\">";
     include 
"menu.php";
echo 
""
    
."</td>"
    
."<td valign=\"top\"><img src=\"images\inttop.gif\" width=\"5\"></td>"
    
."<td width=585 valign=top>";
?>
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
  #12 (permalink)  
Antiguo 16/03/2004, 13:24
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 21 años, 9 meses
Puntos: 0
y menu.php
Código PHP:
<?
  
// No almacenar en el cache del navegador esta página.
//         header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");                     // Expira en fecha pasada
//         header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");        // Siempre página modificada
//         header("Cache-Control: no-cache, must-revalidate");                   // HTTP/1.1
//         header("Pragma: no-cache");                                           // HTTP/1.0
//session_start();
if (isset($HTTP_SESSION_VARS['usuario_run']) && isset($HTTP_SESSION_VARS['usuario_password'])){
    
//echo $HTTP_SESSION_VARS['usuario_login']."<br>";
    //echo $HTTP_SESSION_VARS['usuario_password']."<br>";
    //echo "usuario ya con sesion debo sacar el formulario";
    
echo "<a href=\"test.php?func=logout\"><font face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#FF0000'>Salir zona restringida</font></a>";
    
//die();
}
else{
    
?>
    <form action="test.php" method="post">
<table width="100%" border="0" cellspacing="0" cellpadding="5">
    <tr valign="middle"> 
        <td colspan="2" height="30"> 
              <div align="center">
                   <?
                     
// Mostrar error de Autentificación.
                     //sinclude ("aut_mensaje_error.inc.php");
                     
if (isset($error_login)){
                         echo 
"<font face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#FF0000'>Error: $error_login_ms[$error_login]";
                      }
                    
?>
              </div>
         </td>
     </tr>
     <tr> 
         <td width="39%"> 
             <div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Usuario: </font></div>
         </td>
         <td width="61%"> 
             <div align="left"><input type="text" name="user" size="15" class="imputbox"></div>
         </td>
     </tr>
     <tr> 
         <td width="39%"> 
                      <div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Password : </font></div>
         </td>
         <td width="61%"> 
                      <div align="left"><input type="password" name="pass" size="15" class="imputbox"></div>
         </td>
     </tr>
     <tr valign="middle"> 
            <td colspan="2" height="50"> 
              <div align="center"><font face="Arial" color=black size=2><input name=submit type=submit value="  Entrar  " class="botones"></font></div>
            </td>
     </tr>

</table>
</form>
<?php        
}
        
?>
aqui esta todo el codigo... como dije anteriormente en el index me toma la sesion pero cuando cambio valor en $file no me lo toma mas!
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
  #13 (permalink)  
Antiguo 16/03/2004, 13:56
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Si te fijas bien ..

En tu arriba.php inicias las sesiones .. pero el session_star() sólo lo haces en ese archivo que cargas (con include()) si se cumplen determinadas condiciones de tu if() principal del index.php .. por ejemplo ahí tienes un caso (else del if(empty ...)) que no llamas a tu arriba.php que es done a su vez inicias la sessión con session_start() .. así que todo lo que hagas en esa condición NO inicia la sesión...

Consejo:
Saca del arriba.php el session_start() y usalo en tu index.php antes del "if(empty ... $file)" ... así todo lo que llames bajo tu llamada tipo index.php?file .... ya estará iniciada tu variable de sesión ...

En los scripts que llamas bajo tus include() .. valida por seguridad (para que no te entren directos a los scripts/paginas que llamas desde tu index.php con bajo los include() que haces) la existencia de alguna variable de sesión .. por ejemplo esta que ya controlas:

$HTTP_SESSION_VARS['usuario_run']

(sin usar session_start() en esos scripts .. por qué ya lo haces en tu index ..y si "pasan" directos al script.php que tienes .. dicha variable de sesión no tendrá valor (y más seguro si usases los arrays supergloblales para sesiones $_SESSION)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 16/03/2004, 14:00
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 21 años, 9 meses
Puntos: 0
ok.. entendi lo q me has dicho... voy a tratar de ponerlo en el index, pero me falto una pagina de ejemplo...
ejemplo: si $file = ingresar
la pagina ingresar.php seria:

Código PHP:
include "arriba.php";
#aqui lo q corresponde
include "abajo.php" 
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
  #15 (permalink)  
Antiguo 16/03/2004, 14:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Ok ..

pero igualmente la llamas con un include desde tu index.php bajo la condición que corresponda ..

Un "include()" mezcla el código que llames desde el punto que usas dicha función y con todo junto PHP lo ejecuta como un sólo script .. Así es como funciona el include() o el require() y por eso te hago el comentario que el "session_Start()" que es común para toda página que llames por medio de tu index.php y parámetros que uses que llaman a uno u otro script.php se haga en ese index.php .. Pero por seguridad debes validar las variables de sesión que creas al autentificarse tu usuario en todos esos scripts que usas.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 19:25.