Foros del Web » Programando para Internet » PHP »

Sesiones. Pierdo el valor. No puede ser tan complicado el tema de las sesiones.

Estas en el tema de Sesiones. Pierdo el valor. No puede ser tan complicado el tema de las sesiones. en el foro de PHP en Foros del Web. Hola. Casi nadie se libra de problemas con las sesiones. Siento insistir en el tema, pero no me resigno a que el sistema me venza. ...
  #1 (permalink)  
Antiguo 20/02/2005, 01:23
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 19 años, 11 meses
Puntos: 0
Sesiones. Pierdo el valor. No puede ser tan complicado el tema de las sesiones.

Hola.
Casi nadie se libra de problemas con las sesiones. Siento insistir en el tema, pero no me resigno a que el sistema me venza.
Mi problema es que las variables de sesion "a veces" pierden el valor. Además, en un script idéntico a otro, con la única diferencia de que uno inserta datos en tabla y el otro los actualiza, en el último tengo problemas y en el otro no.
He hecho muchas pruebas y parece que el problema se presenta si el usuario accede a este segundo script (el que da problemas) sin pasar antes por otros.

CONFIGURACIÓN PHP

register_globals ON ON
session.auto_start OFF OFF
session.cookie_lifetime 0 0
session.cache_limiter nocache nocache
session.use_cookies ON ON
session.use_trans_sid 1 1

PROCESO y CÓDIGO

1.- Identifico al usuario. Si está registrado, declaro las variables de sesión y le mando a la página personal (sitecentro.php).

Código PHP:
<?php
session_start
();
$_SESSION['validado']= "SI"
$_SESSION['usuario']= $usuario
$_SESSION['pes']= $pes;
$_SESSION['idcen']= $idcen;
$_SESSION['cen']= $cen;
 
header("Location: sitecentro.php"); 
?>
2.- En la página sitecentro.php hay un menú. La página se inicia así
Código PHP:
<?php
session_start
();
$_SESSION['validado']= "SI"
$_SESSION['usuario']= $usuario
$_SESSION['pes']= $pes;
$_SESSION['idcen']= $idcen;
$_SESSION['cen']= $cen;
include (
"configuracion.php");
$sqlmysql_query("SELECT * FROM latabla WHERE usuario='$usuario'");
while (
$row mysql_fetch_array($sql) )
{
$idcentro $row[idcentro];
$centro $row[centro];
$pes $row[pes];
}
Esto da como resultado una sola fila: la que corresponde al usuario.
Luego el script presenta enlaces a páginas tipo:
<a href=\"paginatal.php\">Listado</a>

Hasta aquí bien. Como véis utilizo cookie (por defecto) para propagar el SID.

3.- En paginatal.php
Código PHP:
<?php
session_start
();
$_SESSION['validado']= "SI"
$_SESSION['usuario']= $usuario
$_SESSION['pes']= $pes;
$_SESSION['idcen']= $idcen;
$_SESSION['cen']= $cen;
include (
"estilo.php");
include (
"seguridad.php");
include (
"headersite.php");
include (
"conexion.php");
if (
$pes 2)
{
include (
"filtropac.php");
exit();
}
Aclaro que el archivo seguridad comprueba si el usuario está validado. Esto para que no se pueda entrar escribiendo la dirección de la página.

Luego vienen las opciones que tiene el usuario. Se accede de esta forma:

Código PHP:
<table>
<
form action="modifica.php\" method=\"POST\">
<input type=\"hidden\" name=\"idvar\" value=\"$idvar\">
<tr>
<td align=\"center\"><INPUT TYPE=\"submit\" VALUE=\"Modificar\">
</td>
</tr>
</form>
</table> 
Hasta el momento, las variables de sesión se transmiten bien (comprobado con echo $lavariabledesesion;).

4.- En modifica.php
Código PHP:
<?php
session_start
();
$_SESSION['validado']= "SI"
$_SESSION['usuario']= $usuario
$_SESSION['pes']= $pes;
$_SESSION['idcen']= $idcen;
$_SESSION['cen']= $cen;
?>
<html>
<head>
<script language="JavaScript"> 
function cuenta(){ 
    document.solalta.total.value = document.solalta.program.value.length; 
   } 
</script>
<script language="JavaScript"> 
function cuenta2(){ 
    document.solalta.total2.value = document.solalta.diriga.value.length; 
   } 
</script>
<script language="JavaScript"> 
function cuenta3(){ 
    document.solalta.total3.value = document.solalta.coment.value.length; 
   } 
</script>
<script language="javascript">
function valida(solalta){
if (solalta.titulo.value=="" || solalta.from.value.indexOf('@',0)==-1){r=0;alert("Por favor, cumplimente el campo Título");return false;}
}  
</script>
</head>
</html>
<?php
include ("estilo.php");
include (
"headersite.php");
include (
"seguridad.php");
include (
"fecha.php");
include (
"configuracion.php");
$idvar $_POST['idvar'];
$sql = ("SELECT *FROM tablados WHERE idvar= '$idvar");
$sql mysql_query($sql,$conn);
while (
$row mysql_fetch_array($sql) )
{
Esto selecciona y muestra los registros que deseo correctamente. Las variables de sesion llegan bien. El usuario cambia el valor de las variables que quiere y las envía. Aclaración: NO SE MODIFICA NUNCA NINGUNA VARIABLE DE SESION.
Por lo que he leído, los javascript (que cuentan el número de caracteres en tres textareas y verifican el formulario solalta) podrían dar problemas. Pero no puede ser porque en el otro script (el que es igual y no da problemas) también están.

El formulario solalta se envía así:
Código PHP:
<table>
<
form name="solalta\" action=\"modbloc.php\" method=\"POST\" onsubmit=\"return valida(solalta)\">
    <input type=\"hidden\" name=\"idvar\" value=\"$idvar\">
     <input type=\"hidden\" name=\"fecha\" value=\"$fecha\">
    <input type=\"hidden\" name=\"control\" value=\"0\">
    <input type=\"hidden\" name=\"nicu\" value=\"$nicu\">
<tr>
<td width=\"30%\" align=\"center\"><b>Título</b> (*)</td>
<td width=\"18%\" align=\"center\"><b>Tipo</b></td>
<td width=\"14%\" align=\"center\"><b>Método</b></td>
<td width=\"19%\" align=\"center\"><b>Inicio</b></td>
<td width=\"19%\" align=\"center\"><b>Fin</b></td>
</tr>
</table> 
5.- En modbloc.php

AQUÍ es donde "a veces" no me llegan las variables de sesión y, por tanto, entra el script de seguridad que no permite entrar y destruye la sesión.

Código PHP:
<?php
session_start
();
$_SESSION['validado']= "SI"
$_SESSION['usuario']= $usuario
$_SESSION['pes']= $pes;
$_SESSION['idcen']= $idcen;
$_SESSION['cen']= $cen;
include (
"estilo.php");
include (
"headersite.php");
include (
"seguridad.php");
$titulo strtolower($titulo);
$titulo ucwords($titulo);
include (
"configuracion.php");
if (
$titulo!= "")
{
Se hacen unas comprobaciones por el lado servidor y si todo va bien actualiza la tabla.
_________________________________________________

La verdad, no sé lo que hago mal.
Hay algo que no funciona. Lo malo es que a veces funciona y a veces no. Y lo que más me despista es que en el otro script (es lo mismo, excepto que inserta datos) nunca me falla.

Si envío $validado de forma hidden por el formulario solalta, parece que no hay problema (fuerzo el envío de esta variable por si acaso y listo). Pero esto no me gusta nada porque no sé que pasa con las variables de sesión que no recibo cuando el Usuario continúa navegando. Es decir, pierdo el control.

Perdonad lo extenso de mi post, pero he querido que fuese lo más claro posible para ver si alguien me puede decir donde está el fallo.

Casi seguro que es una tontería de las de manual, pero la verdad es que no lo encuentro.

Gracias a todos.

Última edición por javifo; 20/02/2005 a las 01:25
  #2 (permalink)  
Antiguo 21/02/2005, 06:34
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 19 años, 11 meses
Puntos: 0
Casi solucionado

El problema estaba en la página de proceso.

Una pregunta.. ¿es siempre necesario declarar en cada página
$_SESSION['loquesea']= $loquesea; cuando register_globals está en ON ON?

Gracias
  #3 (permalink)  
Antiguo 21/02/2005, 11:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por javifo
El problema estaba en la página de proceso.

Una pregunta.. ¿es siempre necesario declarar en cada página
$_SESSION['loquesea']= $loquesea; cuando register_globals está en ON ON?

Gracias
?¡?¡?

$_SESSION no es más que un array como otro cualquiera .. sólo que tiene la "virtud" de que sus datos son almacenados en el servidor . .así que en un scriptX.php le das un valor .. y en subsiguientes_scripts.php puedes accederlo .. Si tu vas cambiando su valor en cada script .. al final sólo prevalece el último que modificas.

En tus ejemplos .. no sé para que siempre haces eso de $_SESSION['variable']=$variable .. Eso lo debes hacer en UN sólo script .. el que valide o lo que sea que es realmente cuando le das valor por qué lo obtendrás de algún sitio .. en el resto de script .. las usas si las necesitas (echo $_SESSION['variable'] .. o en if() .. para validar .. etc...) pero nada más.

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 18:22.