Foros del Web » Programando para Internet » PHP »

Pierdo la session por el camino

Estas en el tema de Pierdo la session por el camino en el foro de PHP en Foros del Web. y no se donde se me pierde... En toda la pagina la mantiene, pero a la que añado/edito algo del foro que me e montado ...
  #1 (permalink)  
Antiguo 16/01/2005, 14:02
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 11 meses
Puntos: 0
Pierdo la session por el camino

y no se donde se me pierde...
En toda la pagina la mantiene, pero a la que añado/edito algo del foro que me e montado pierdo todo lo que tenia guardado en las variables de sesion.
Y lo bueno es que tan solo he tocado unos header que redireccionan al hacer la consulta SQL... antes funcionaba.
Pongo un poco en situación, mi web es modular, todo pasa a traves del index.php.
Al indicar que quiero insertar/editar algo en el foro, incluyo en el index.php un modulo (llamemoslo data) que a su vez, mediante otra variable que le indico incluye a su vez otro modulo donde se encuentra la sentencia sql a realizar.
Una vez realizada la sentencia sql, hay un header ("Location: index.php?blablabla"); (dentro del modulo data, justo despues de haber incluido el ultmo modulo).

Pues bien, he puesto varios echoes de $_SESSION['nombre'] (una variable que tengo).
Uno lo he puesto arriba del todo del index.php, para que lo muestre nada mas cargar.
Otros en otros modulos laterales (menús).
Y el ultimo lo he colocado dentro del modulo data y es aqui done pierde el valor, ya que en los demas echoes me lo muestra correctamente.
He probado incluso comentando el ultimo include para ir descartando, pero se pierde al entrar en data...
Tambien quiero decir que en el modulo data administro otras sentencias sql de otras secciones dela web, pero curiosamente solo me da problemas con la sesion con aqeullo relacionado con el foro, cosa que no entiendo...
Aqui pongo el codigo del data por si sirve, pero la verdad.. yo no veo ninguna diferencia aquello relacionado con el foro con las demas secciones...
  #2 (permalink)  
Antiguo 16/01/2005, 14:06
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 11 meses
Puntos: 0
*Nota: he omitido la parte de recepción de variables ya que es demasiado larga, y no es otra cosa que el nombre de la variable igualado a $_GET/$_POST dependiendo del caso...


Código PHP:
<?php
switch($loque)
    {    case 
"user":    include("udatas/upuser.php");
                        
header ("Location: index.php?mod=sujeto&idU=$quien");
                        break;
        case 
"foto":    include("udatas/upfoto.php");
                        
header ("Location: index.php?mod=fver&foto=$nomfoto&pagina=$pagina&idfoto=$idfoto&tipophoto=$tipo&vuelvo=1");
                        break;
        case 
"lista":    include("udatas/newLvalue.php");
                        
header ("Location: index.php?mod=lval&listID=$ListId&primer=$pagina");
                        break;
 
                 
//Nuevo post en el foro-->problemas
        
case "newpost": include("udatas/newPost.php");
                        
header ("Location: index.php?mod=tema&tema=$idtema&primer=$pagina");
                        break;
                 
//Edita post del foro--->problemas
        
case "edpost":     include("udatas/edPost.php");
                        break;
        
                 
//Nuevo topic del foro--->problemas                
        
case "newtopic": include("udatas/newTopic.php");
                         
header ("Location: index.php?mod=tema&tema=$nextid&primer=0");
                         break;        
        case 
"delTop":    include("udatas/delTopic.php");
                        break;
        case 
"delPos":    include("udatas/delPost.php");
                        break;
                         
        case 
"newnot"//include("udatas/newNot.php");
                        
$sdate=$sdate." ".$hora;
                        
$sql="INSERT INTO `noticias` ( `contenido` , `grupos` , `fecha`) VALUES ( '$desc','$grupos','$sdate')";
                        echo 
$sql;
                        
$afoto=mysql_query($sql)  or die(mysql_error());
                                
header ("Location: index.php");
                        break;
                                    
    }
?>
Bueno.. he usado la busqueda del foro (tendria que haverla usado antes lose) y veo que hay muchos post dedicados a este problema... vere si puedo solucionarlo con eso, sino... ya volvere ;)

Última edición por clinisbut; 16/01/2005 a las 14:18
  #3 (permalink)  
Antiguo 16/01/2005, 14:33
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 11 meses
Puntos: 0
Creo q los problemas estan con la transmision del sid:
En el pc donde hago las pruebas (y no tengo problemas) esta configurado como: session.use_trans_sid=0
En canvio en el servidor donde esta alojada esta en off.
Luego veo en el servidor que ssion.use_cookies=On
Quiere decir esto que debo propagar el sid a traves de cookies?
Si es asi como debo hacerlo?
  #4 (permalink)  
Antiguo 17/01/2005, 12:44
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 11 meses
Puntos: 0
Nadie puede ayudarme? No soy capaz de encontrar la respuesta a mi error...
  #5 (permalink)  
Antiguo 18/01/2005, 05:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Deberías adjuntar más código .. no se vé por ningún sitio como gestionas tus sesiones ..

Por ejemplo falta ver si realmente usas session_start() en los scripts que usas o pretendes acceder a una variable de sesión ($_SESSION)

Un saludo,
  #6 (permalink)  
Antiguo 18/01/2005, 12:19
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 11 meses
Puntos: 0
Bueno... ahora mismo no puedo adjuntar mas codigo (no estoy en casa),
pero q recuerde tengo (mas o menos, mas tarde lo apuro):
En el index.php tengo el formulario que envia los datos via POST a auth.php
que comprueba los datos y si son correctos:

session_start();
$_SESSION['nombre']=mysql_result($result,0,'blablabla');
$_SESSION['mas_cosas']=mysql_result($result,0,'blablabla');

Hago algo así, mas tarde adjunto el codigo.
Lo de la transmision del SID... pos yo personalmente no hago nada con ello, en la URL no veo que se transmita tampoco...ni uso cookies.
Toda pagina pasa por el index.php donde existe un session_start(); que (según creo yo) recupera si existe los valores de las variables que definí en el auth.php.
  #7 (permalink)  
Antiguo 18/01/2005, 15:48
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 11 meses
Puntos: 0
Aqui el script de index.php
Código PHP:
<?php    
ob_start
();
    
session_start();
    include(
"opendb.php");
    include(
"conf.php");

    
$modulo$_REQUEST['mod'];
    if(empty(
$modulo))
        
$modulo=DEFECTO;

    if (empty(
$conf[$modulo])) 
        
$modulo DEFECTO;
    
$path_modulo PATH.'/'.$conf[$modulo]['arxiu'];
    
echo
"<html>
     <title>Titulo del archivo</title>
     <link rel=stylesheet type='text/css' href='format.css'>    
     <body>
      <table border=1 width=100% height=100% cellpadding=='0' cellspacing='0'>
        <tr>
            <td width=20% valign=`top'>"
;
            include(
"mod/left.php");

echo
"        </td>
             <td valign='top'>"
;
            if (
file_exists$path_modulo )) 
                include( 
$path_modulo ); 
            else 
                die(
'Error al cargar el módulo <b>'.$modulo.'</b>. No existe el archivo <b>'.$conf[$modulo]['arxiu'].'<br>'.
                
$path_modulo.'</b>');
echo
"        </td>
            <td valign='top' width=15%>right
            </td>
        </tr>
     </table>
     </body>
    </html>"
;
ob_end_flush();
?>
Aqui el auth.php
Código PHP:
<?php
    ob_start
();
    
session_start();
    include(
"../opendb.php");
    
$login=$_POST['nom'];
    
$pass=$_POST['contra'];
    
//Si no es deslog... es log
    
    
if($_GET['mod']=='deslog')
    {    
session_destroy();
        echo 
"desconectado";
        
header ("Location: ../index.php");
    }
    else
    {    
$sql="SELECT count(id_usr) FROM amigos WHERE usr_login='$login' AND usr_pass='$pass'";
        
$result=mysql_query($sql) or die (mysql_error()."<br>$sql");
        
$num mysql_result($result0);
        if(!
$num)
        {    echo 
"No existes<br>$sql";
            
session_destroy();
            
header ("Location: ../index.php");
        }
        else
        {    
$sql="SELECT * FROM amigos,grupos WHERE usr_login='$login' AND usr_pass='$pass' AND grupos.id_usr=amigos.id_usr";
            
$result=mysql_query($sql) or die(mysql_error()."<br>$sql");
            
                
$_SESSION['ID_usr']=mysql_result($result,0,'id_usr');
                
$_SESSION['nom']=mysql_result($result,0,'nom');
                
$_SESSION['grupos']=mysql_result($result,0,'idgrupo');
                
$grupo=split("-",$_SESSION['grupos']);
                
$_SESSION['Gactual']=$grupo[0];
                echo 
"conectado";
                
header ("Location: ../index.php");
        }
    }
    
ob_end_flush();
?>
Y asi es como inicio los valores de las variables de $_SESSION..., luego simplemente voy saltando a index.php enviandole la variable que contiene el modulo a cargar. En el Pc donde hago las pruebas funciona todo perfecto, la configuración del SID la puse arriba, la de mi pc i la del server... a ver que puede ser...
  #8 (permalink)  
Antiguo 19/01/2005, 07:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Según tu código y uso de sesiones en PHP .. estás asumiendo que el SID lo vas a propagar en Cookies (por qué no propagas el SID en el URL manualmente ni lo hace tu configuración de PHP y a pesar de eso no lo haría en redireccionamientos tipo header("location ..."))

Cita:
session.use_trans_sid=0
En canvio en el servidor donde esta alojada esta en off.
0 u OFF es lo mismo . .en ambos servidores dicha directiva y estado indica que no se va a propagar el SID re.escribiendo el SID en links y otros redireccionamientos.

Cita:
Luego veo en el servidor que ssion.use_cookies=On
Quiere decir esto que debo propagar el sid a traves de cookies?
Si, según eso ... el SID lo va a propagar PHP en una cookie que va a crear para tal efecto y que por ende tu "cliente" (navegador) ha de aceptarla. Si usas proxys o firewalls .. revisa que estos no las estén bloqueando.

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 12:54.