Foros del Web » Programando para Internet » PHP »

confundido... inexplicable salida de sesion

Estas en el tema de confundido... inexplicable salida de sesion en el foro de PHP en Foros del Web. Hola amigos: Esto me tiene muy complicado, no logro encontrar la falla. Tengo que hacer un fotolog, todo iba bien en el desarrollo hasta que ...
  #1 (permalink)  
Antiguo 01/06/2008, 10:34
Avatar de dplweb  
Fecha de Ingreso: enero-2002
Mensajes: 74
Antigüedad: 22 años, 4 meses
Puntos: 0
confundido... inexplicable salida de sesion

Hola amigos:

Esto me tiene muy complicado, no logro encontrar la falla.
Tengo que hacer un fotolog, todo iba bien en el desarrollo hasta que una seccion me saca de la sesion por una razon que no entiendo. Trabajo con Firefox pero lo probe en IE y me da el mismo efecto.
Otras secciones tienen la misma estructura y no causan problemas.
Cuando entro a la cuenta de usuario doy clic en el link de esa seccion, y se carga bien.. pero cuando recargo la pagina o vuelvo a hacer clic en el mismo link (lo cual deberia dar el mismo resultado) me saca de la sesion.
Es como si algo en la pagina dejara un rastro para que se salga de la sesion.
No entiendo. Si entro a la sesion, y hago click en otro link similar y luego recargo, ningun problema.
Como veran lo que se ejecuta es la ultima instruccion. Si hubiera un problema de llaves me daria error y no es asi.
Agradeceré cualquier aporte. Ya muchas horas dandole vueltas a esto.

Aqui va la pagina

Código PHP:
<?
if ($_SESSION[AUT] && ($_SESSION[USER] == $CUENTA_USER)) {
    
    
$S_datos "SELECT * FROM tab_users WHERE id = '$ID_USER'";
    
$R_datos mysql_query($S_datos);
    
    if (
mysql_num_rows($R_datos) > 0) {
        
$USER mysql_fetch_array($R_datos);
    }
    
    
$HORA date("H:i:s"time() - (60*60));
    if (
date("H") == "00"$FECHA date("Y-m-d"time() - (24*60*60));
    else 
$FECHA date("Y-m-d");
    
    
$mensaje "";
    

?>
<div style="font-size:12px; color:#000000">
<div style="font-size:18px; font-weight:bold; margin-bottom:10px">Cuenta de usuario</div>

<fieldset>
<legend>Configuración básica</legend>
<form name="form_user" method="post" action="index.php?pag=cuenta">
<table cellspacing="0" cellpadding="0" border="0">
<tr style="vertical-align:top">
<td>Nombre de usuario:</td>
<td style="font-weight:bold"><?=$CUENTA_USER?></td>
</tr>
<tr style="vertical-align:top">
<td>Nueva contraseña:</td>
<td><input name="n_pass" type="password" value="">
<br>
<br>
</td>
</tr>
<tr style="vertical-align:top">
<td>Repetir nueva contraseña:</td>
<td><input name="n_pass2" type="password" value=""><br>
<br>
</td>
</tr>
<tr style="vertical-align:top">
<td>Dirección de email:</td>
<td><input name="email" type="text" value=""><br>
<br>
</td>
</tr>
<tr style="vertical-align:top">
<td>Escribe tu contraseña actual para actualizar:</td>
<td><input name="pass" type="password" value="">
<br>
<br>
</td>
</tr>
<tr style="vertical-align:top">
<td colspan="2"><button type="submit">Actualizar</button></td>
</tr>
</table>
</form>
</fieldset>

<fieldset>
<legend>Perfil de usuario</legend>
<form name="form_perfil" method="post" action="index.php?pag=cuenta">
<table cellspacing="0" cellpadding="0" border="0">
<tr style="vertical-align:top">
<td>Nombre de la mascota:</td>
<td style="font-weight:bold"><input name="nombre_mascota" type="text" value="<?=$USER[nombre_mascota]?>"></td>
</tr>
<tr>
<td>Sexo de la mascota:</td>
<td style="font-weight:bold"><input name="sexo_mascota" type="radio" value="m" id="sexo_m"> <label for="sexo_m">Macho</label> <input name="sexo_mascota" type="radio" value="h" id="sexo_h"> <label for="sexo_h">Hembra</label></td>
</tr>
<tr style="vertical-align:top">
<td>Propietario:</td>
<td><input name="nombre_propietario" type="text" value="<?=$USER[nombre_propietario]?>">
<br>
<br></td>
</tr>
<tr style="vertical-align:top">
<td>Nombre(s):</td>
<td><select name="dia_mascota">
<option value="">&nbsp;</option>
<?
for ($i 1$i <= 31$i++) {
    if (
$i 10$i "0".$i;
    else 
$i $i;
    print 
"<option value=\"$i\"";
    if (
$i == $USER[dia_mascota]) print " selected=\"selected\"";
    print 
">$i</option>\n";
}
?>
</select>
/
<select name="mes_mascota">
<option value="">&nbsp;</option>
<?
$meses 
= array(1=>"Enero""Febrero""Marzo""Abril""Mayo""Junio""Julio""Agosto""Septiembre""Octubre""Noviembre""Diciembre");
while(list(
$codigo$mes) = each($meses)) {
    if (
$codigo 10$codigo "0".$codigo;
    else 
$codigo $codigo;
    print 
"<option value=\"$codigo\"";
    if (
$codigo == $USER[mes_mascota]) print " selected=\"selected\"";
    print 
">$mes</option>\n";
}
?>
</select>
/
<select name="ano_mascota">
<option value="">&nbsp;</option>
<?
$ano_actual 
date("Y");
$ano_minimo $ano_actual 40;
$dif $ano_actual $ano_minimo;
$j 0;
for (
$i $ano_minimo$i <= $ano_actual$i++) {
    
$ano[$j] = $i;
    
$j++;
}
$ano2 array_reverse($ano);
foreach(
$ano2 as $valor) {
    print 
"<option value=\"$valor\"";
    if (
$valor == $USER[ano_mascota]) print " selected=\"selected\"";
    print 
">$valor</option>\n";
}
?>
</select>
<br>
<br>
</td>
</tr>
<tr style="vertical-align:top">
<td>Apellido paterno:</td>
<td><br>
<br></td>
</tr>
<tr style="vertical-align:top">
<td>Apellido materno:</td>
<td><input name="email" type="text" value=""><br>
<br></td>
</tr>
<tr style="vertical-align:top">
<td>Escribe tu contraseña actual para actualizar:</td>
<td><input name="pass" type="password" value="">
<br>
<br></td>
</tr>
<tr style="vertical-align:top">
<td colspan="2"><button type="submit">Actualizar</button></td>
</tr>
</table>
</form>
</fieldset>
</div>
<?
}
else {
    print 
JSredir("index.php");
}
?>
Código PHP:
function JSredir($url$algo="") {
    
$html "<script type=\"text/javascript\"> location.href='$url';";
    if (
$algo != ""$html .= " $algo";
    
$html .= "</script>";
    if (
$html != "") return $html;

Muchas gracias a todos.
Saludos
__________________
...webmastereando por la vida...
  #2 (permalink)  
Antiguo 01/06/2008, 11:31
Avatar de dplweb  
Fecha de Ingreso: enero-2002
Mensajes: 74
Antigüedad: 22 años, 4 meses
Puntos: 0
Respuesta: confundido... inexplicable salida de sesion

Esto sí que no lo entiendo, hay algo que ignoro??

Se me ocurrió comentar esta parte de código:
Código PHP:
    $S_datos "SELECT * FROM tab_users WHERE id = '$ID_USER'";
    
$R_datos mysql_query($S_datos);
    
    if (
mysql_num_rows($R_datos) > 0) {
//        $USER = mysql_fetch_array($R_datos);
    

¿Cual seria el problema?

Es la variable $USER??? Y por que???

Saludos y gracias
__________________
...webmastereando por la vida...
  #3 (permalink)  
Antiguo 01/06/2008, 13:12
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 16 años, 11 meses
Puntos: 49
Respuesta: confundido... inexplicable salida de sesion

Hola dplweb, seguro que estas propagando corectamente tus variables de sesión? prueba así tu código, otra cosa de donde obtienes $ID_USER y $CUENTA_USER? como las estas rescatando? verifica que la consulta no contiene errores con mysql_error()
Código PHP:
<?php
session_start
(); 
if (isset(
$_SESSION['AUT']) && ($_SESSION['USER'] == $CUENTA_USER)) { 
     
    
$S_datos "SELECT * FROM tab_users WHERE id = '$ID_USER'"
    
$R_datos mysql_query($S_datos) or die( mysql_error() ); 
     
    if (
mysql_num_rows($R_datos) > 0) { 
        
$USER mysql_fetch_array($R_datos); 
    } 
     
    
$HORA date("H:i:s"time() - (60*60)); 
    if (
date("H") == "00"){ $FECHA date("Y-m-d"time() - (24*60*60)); }
    else{ 
$FECHA date("Y-m-d");}
     
    
$mensaje ""
 
?>
Saludos.

Última edición por Carlojas; 01/06/2008 a las 13:31
  #4 (permalink)  
Antiguo 01/06/2008, 13:49
Avatar de dplweb  
Fecha de Ingreso: enero-2002
Mensajes: 74
Antigüedad: 22 años, 4 meses
Puntos: 0
Respuesta: confundido... inexplicable salida de sesion

Hola
Gracias por responder.

Mira, las variables $ID_USER y $CUENTA_USER estan en un archivo incluido dentro del mismo archivo que llama al archivo donde esta el codigo que les mandé.
No creo que ese sea el problema, porque de hecho funcionan bien.

Bueno, mysql_error() esta puesto y no arroja errores en la consulta.

Probé cambiando $USER por $usuario... asignado a la misma instruccion y no me dio mas problemas... pero mas alla de eso... por que me da problemas ese nombre de variable???

Ahora, te agradeceré si me puedes explicar que eso de propagar variables de session.

Ahora mismo estoy con otro problema que quizas tenga relacion con esto ultimo:

estoy en una pagina "http://www......../fotolog/usuario/index.php"
y hay un link que indica hacia "http://www......../fotolog/index.php?pag=cuenta"
pero la sesion se cierra tambien... que es lo que pasa?

en ambos index.php establezco session_start(), ¿por que la sesion se pierde simplemente por cambiar de directorio?

Muchas gracias por las ayudas.
Saludos
__________________
...webmastereando por la vida...
  #5 (permalink)  
Antiguo 01/06/2008, 16:19
 
Fecha de Ingreso: abril-2008
Mensajes: 613
Antigüedad: 16 años
Puntos: 22
Respuesta: confundido... inexplicable salida de sesion

Hola,
¿No puede ser que será necesario hacer un "session_register"?

Saludos
__________________
Compartir es vivir
www.programador-php.com
  #6 (permalink)  
Antiguo 01/06/2008, 16:55
Avatar de dplweb  
Fecha de Ingreso: enero-2002
Mensajes: 74
Antigüedad: 22 años, 4 meses
Puntos: 0
Respuesta: confundido... inexplicable salida de sesion

Hola

Segun el manual de PHP, sobre la funcion session_register():
Código:
Si está usando $_SESSION (o $HTTP_SESSION_VARS), 
no use session_register(), session_is_registered(), 
ni session_unregister().
Y por eso no lo hago.

Ahora, lo dices por alguna razon en especial? dime lo que piensas para asi aprender mas. Este tema de las sesiones es algo interesante para crear aplicaciones.

Estoy avanzando pero no de la forma que queria, queria lograr algo similar a fotolog.com en que el usuario puede ver su perfil y cargar fotos desde una ubicacion que no es su propia carpeta, en mi caso era solo un directorio mas arriba nada mas, y no un subdominio especial como en fotolog.com.
He tenido que adaptar la pagina del usuario para que acepte las paginas de administracion ahi mismo... se ve "raro" pero funciona.
Como un fotolog no es ninguna novedad las comparaciones son inevitables, mas aun con algo tan bien logrado y acabado como lo es fotolog.com u otros similares.

Muchas gracias por sus aportes.
Saludos
__________________
...webmastereando por la vida...
  #7 (permalink)  
Antiguo 01/06/2008, 17:05
 
Fecha de Ingreso: abril-2008
Mensajes: 613
Antigüedad: 16 años
Puntos: 22
Respuesta: confundido... inexplicable salida de sesion

Pues tienes razón, yo lo seguía utilizando...
Entonces, lo de tu problema no sé qué puede ser. Yo, siempre que he tenido problemas con sesiones ha sido una de estas razones:
el "session_start()" no estaba en su sitio
la directiva "register_globals" no estaba activada y era necesaria
la sesion se estaba seteando en un sitio no controlado.

Siento no poder decirte más.
Saludos
__________________
Compartir es vivir
www.programador-php.com
  #8 (permalink)  
Antiguo 01/06/2008, 23:11
Avatar de dplweb  
Fecha de Ingreso: enero-2002
Mensajes: 74
Antigüedad: 22 años, 4 meses
Puntos: 0
Respuesta: confundido... inexplicable salida de sesion

Hola
Bueno register_globals no lo tomo en cuenta ya que hace tiempo me acostumbré a utlizar las superglobales, aun cuando este activado.

Al parecer es un error mio, pero no importa por el momento, debo terminar esta aplicacion y a como de lugar, mas adelante la mejoraré.
Muchas gracias por tus intervenciones.

Por cierto, sabes donde encontrar un buen manual sobre "clases PHP" me gustaria aprender sobre eso.
Saludos
__________________
...webmastereando por la vida...
  #9 (permalink)  
Antiguo 02/06/2008, 07:37
 
Fecha de Ingreso: abril-2008
Mensajes: 613
Antigüedad: 16 años
Puntos: 22
Respuesta: confundido... inexplicable salida de sesion

No utilizo mucho los manuales. Si te refieres a CLASES ya hechas de PHP. En cuanto a desarrollar clases en PHP, yo miraría en "php.net" allí está todo. Luego en los foros siempre encuentras gente qu ha desarrollado clases.

Saludos
__________________
Compartir es vivir
www.programador-php.com
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 22:22.