Foros del Web » Programando para Internet » PHP »

Expediente X y sessiones PHP

Estas en el tema de Expediente X y sessiones PHP en el foro de PHP en Foros del Web. hola!!! Hace un tiempo tube un problema con las sessiones de PHP, después de los consejos del maravilloso Cluster, conseguí que me funcionará, el expediente ...
  #1 (permalink)  
Antiguo 19/06/2003, 17:55
Avatar de Woody  
Fecha de Ingreso: abril-2003
Ubicación: Madrid y Barcelona
Mensajes: 68
Antigüedad: 14 años, 7 meses
Puntos: 0
Pregunta Expediente X y sessiones PHP

hola!!!

Hace un tiempo tube un problema con las sessiones de PHP, después de los consejos del maravilloso Cluster, conseguí que me funcionará, el expediente X es que ahora después de los exámenes volvi a trabajar en la página que tengo colgada en lycos y no funcionan... no me aparece lo de PHPSESSION="clave larguísima"... y no me aguanta la sessión... en un principio me dice que estoy conectado pero al linkear en algun otro sitio de la página se vuelve a desconectar.

En el Apache que tengo en mi ordenar con una copia de seguridad si que me funciona... a si que supongo que será algo de lycos... la pregunta es: ¿Qué tengo que hacer para que vuelva a funcionar en lycos? ¿Por qué funcionaba antes?

Aquí os dejo el código por si el fallo es del código y también por si alguien lo quiere y le sirve...

Gracias por adelantado por la ayuda.

Código PHP:
session_start();
            
            if (
$bye == si) {
                             unset(
$_SESSION['nick']);

                             
session_destroy();
                             }
            
            if (isset (
$_SESSION['nick']) ){
                    
$boton "perfil";
                    
$nick $_SESSION['nick'];
                    
$nivel_ $_SESSION['nivel'];
                    
$cuadroConexion '<table width="100%" border="0"   cellpadding="0" cellspacing="6" frame="hsides">
                            <tr> 
                              <td align="center"><b><font color="#FFFFFF" size="3"> Hola <br></b></font></td>
                             <tr> 
                              <td align="center"><b><font color="#FFFFFF" size="3"> '
.$nick.'!<br></b></font></td>
                             </tr>
                             <tr><td align="center">
                             <form name="desconexion" method="post" action="index.php?page=Chorro_principal">                                         
                               <input type="hidden" name="bye" value="si">
                             <input type="submit" name="Conectar" value="Desconectar">
                                </form>
                             </td>
                             </tr>             
                              </table>'
;}
            
                
//No está definida la clave
             
               
elseif (!isset ($claveConexion)) {
                            
                            
$cuadroConexion '<form name="conexion" method="post" action="index.php?page=Chorro_Conectate">                                         
                              <table width="100%" border="0"   cellpadding="0" cellspacing=s"6" frame="hsides">
                            <tr> <td><font color="#FFFFFF" size="2"> <b>Nick:</b></font></td></tr>
                            <tr><td><input type="text" name="nickConexion" size="15" maxlength="64" value="'
.$nickConexion.'"></td></tr>
                            <tr><td><font color="#FFFFFF" size="2"> <b>Contraseña:<br></b></font></td></tr>
                            <tr><td><input type="password" name="claveConexion" size="15" maxlength="64" value="'
.$claveConexion.'"></td></tr>
                            </table>
                            <table align="center">
                            <tr> 
                              <td colspan="2" align="center"> 
                              
                                <input type="submit" name="Conectar" value="Conectar">
                                &nbsp;&nbsp;&nbsp; 
                              </td>
                           </tr>
                           </table></form>'
;
                        
$nivel_ 5;
                        }
                        
                elseif ( 
$claveConexion == '' OR $nickConexion == '') { 
                
// No hay escrito la clave o el nick
                
$mensajeConexion '<font color="#FF0000" size="3"> <b>No has introducido el nick y/o la contraseña. </b></font>';
                
                
$cuadroConexion '<form name="conexion" method="post" action="index.php?page=Chorro_Conectate">                                         
                              <table width="100%" border="0"   cellpadding="0" cellspacing=s"6" frame="hsides">
                            <tr> <td><font color="#FFFFFF" size="2"> <b>Nick:<br></b></font></td></tr>
                            <tr><td><input type="text" name="nickConexion" size="15" maxlength="64" value="'
.$nickConexion.'"></td></tr>
                            <tr><td><font color="#FFFFFF" size="2"> <b>Contraseña:<br></b></font></td></tr>
                            <tr><td><input type="password" name="claveConexion" size="15" maxlength="64" value="'
.$claveConexion.'"></td></tr>
                            </table>
                            <table align="center">
                            <tr> 
                              <td colspan="2" align="center"> 
                
                                <input type="submit" name="Conectar" value="Conectar">
                                &nbsp;&nbsp;&nbsp; 
                              </td>
                           </tr>
                           </table></form>'
;
                
$nivel_ 5;
            
                }
            
            else{ 
                
                
$baseDatos mysql_connect("localhost",$usuario_db,$password_db) or die(mysql_error());
                
mysql_select_db("somoselchorrotorrijo_es_db",$baseDatos);
                
$peticion "SELECT contrasena,nivel_ FROM miembros WHERE nick='$nickConexion'"
                
$resultados mysql_query ($peticion,$baseDatos);
                
$campoconexion mysql_fetch_object ($resultados);
                
$contrasenaConexion $campoconexion->contrasena;
                        
                
//Clave buena
                
if ($claveConexion ==  $contrasenaConexion && $contrasenaConexion !== '' && isset($contrasenaConexion)) {
                        
$boton "perfil";
                        
$nivel_ $campoconexion->nivel_
                        
$mensajeConexion '<font color="#009900" size="3"> <b> Ya estás conectado. :) </b></font>';
                        
$cuadroConexion '<table width="100%" border="0"   cellpadding="0" cellspacing="6" frame="hsides">
                            <tr> 
                              <td align="center"><b><font color="#FFFFFF" size="3"> Hola <br></b></font></td>
                             <tr> 
                              <td align="center"><b><font color="#FFFFFF" size="3"> '
.$nickConexion.'!<br></b></font></td>
                             </tr>
                             <tr> 
                              <td align="center">
                             <form name="desconexion" method="post" action="index.php?page=Chorro_principal">                                         
                               <input type="hidden" name="bye" value="si">
                             <input type="submit" name="Conectar" value="Desconectar">
                                </form>
                             </td>
                             </tr>             
                              </table>'
;
                            
//session_start();
                            
$_SESSION['nick']= "$nickConexion";
                            
$_SESSION['nivel']= "$nivel_";}
                
                
//Clave errónea
                
else {  
                        
$mensajeConexion '<font color="#FF0000" size="3"> <b>No has introducido el nick y/o la contraseña correctamente. Vuelve a intentarlo o regístrate si no lo has hecho aún. ;)</b></font>';
                        
                        
$cuadroConexion '<form name="conexion" method="post" action="index.php?page=Chorro_Conectate">
                    
                              <table width="100%" border="0"   cellpadding="0" cellspacing="6" frame="hsides">
                            <tr> <td><font color="#FFFFFF" size="2"> <b>Nick:<br></b></font></td></tr>
                            <tr><td><input type="text" name="nickConexion" size="15" maxlength="64" value="'
.$nickConexion.'"></td></tr>
                            <tr><td><font color="#FFFFFF" size="2"> <b>Contraseña:<br></b></font></td></tr>
                            <tr><td><input type="password" name="claveConexion" size="15" maxlength="64" value="'
.$claveConexion.'"></td></tr>
                            </table>
                            <table align="center">
                            <tr> 
                              <td colspan="2" align="center"> 
                               
                                <input type="submit" name="Conectar" value="Conectar">
                                &nbsp;&nbsp;&nbsp; 
                              </td>
                           </tr>
                           </table></form>'
;
                         
$nivel_ 5;
                        }} 

Mi página es una página formada por una página contenedor (index) y otra contenida, bueno este código que he puesto esta en el index y se carga siempre... un amigo me ha dicho que este puede que sea el problema... pero la verdad es que no entiendo porque esto es un problema, así que si este es el fallo me gustaría saber por qué.
Gracias otra vez.
  #2 (permalink)  
Antiguo 19/06/2003, 18:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues el problema puede ser que Lycos no esté propagando el SID en una cookie o que tu navegador no la acepte si Lycos así lo hace ..

Lo que es tu código no propagas el SID manualmente en tus links .. así que estás dejando que PHP lo haga por sí sólo en modo automatico .. eso lo determina el estado de las directivas de php.ini (o phpinfo() en su defecto lo puedes ver):

session.use_trans_sid = 1 (debe estar a 1 según tu programación ..)

session.use_cookies = 1 (si así está activada .. tu navegador deberá aceptarlas ..)

Que me acuerde .. Lycos no propaga el SID en cookie (revisalo en un phpinfo() .. ) así que tendrás que hacerlo manualmetne .. Eso implica que uses:

SID como constante .. o
$mysid=session_name()."=".session_id();

Y lo propages en tus links o formularios (en los formularios .. lo puedes propagar en un campo hidden .. o simlemente en el acction como una varible más .. Ejemplo:

Código PHP:
echo "<form ...... action=\"pagina.php?page=noseque&".SID."\">"
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 20/06/2003, 10:13
Avatar de Woody  
Fecha de Ingreso: abril-2003
Ubicación: Madrid y Barcelona
Mensajes: 68
Antigüedad: 14 años, 7 meses
Puntos: 0
Tenías razón pero...

Bueno, después de poner en el index al final de todo un phpinfo() pues he comprobado que Cluster ha dado en el clavo las opciones de lycos son:

session.use_trans_sid = Off

session.use_cookies = On

y como mis sessiones son por sid pues no me funciona asi que he añadido justamente debajo de sessionstart() la variable:

Código PHP:
$mysid=session_name()."=".session_id(); 
y después de uno de los links he puesto:

Código PHP:
<?php echo "&".$mysid.""?>
y funciona bien


El problema es que mi página ya esta en un nivel de desarrollo avanzado (bueno tampoco estratosférico) y me pongo a temblar al pensar que tengo que ir link por link añadiendo esto último...

Que puedo hacer para no tener que ir link por link? estoy incluso dispuesto a cambiar de servidor si alguien sabe alguno que funcione bien para clientes españoles y que tenga la dichosa función session.use_trans_sid = On.

Muchas gracias.
  #4 (permalink)  
Antiguo 20/06/2003, 12:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Podrías "forzar" la configuración de PHP .. (esto es probable que en Lycos no funcione = no te deje ejecutar ini_set() en general)

ini_set("session.use_trans_sid","On");

o

ini_set("session.use_trans_sid","1");

Eso al principio de tus scripts (y antes de session_start() o cualquier función de uso de sesiones)

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 20/06/2003, 14:36
Avatar de Woody  
Fecha de Ingreso: abril-2003
Ubicación: Madrid y Barcelona
Mensajes: 68
Antigüedad: 14 años, 7 meses
Puntos: 0
Vuelves a tener razón...

Bueno, lo he intentado y no funciona... Lycos no me deja forzar la propagación de la sessión de forma automática, así que tendré que molestarme en ir link por link propagando la sessión manualmente...

Ya he cambiado estas opciones en mi Appache y las he puesto en Off para poder hacer las pruebas antes de ir subiendo los scrips modificados...

Bueno, muchas gracias por todo y sigue igual de amable y servicial, si todo el mundo fuese igual de generoso que tu en sus conocimientos el munco iría muchísimo mejor.

Un saludo.
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 07:23.