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");
?>
Código PHP:
<?php
session_start();
$_SESSION['validado']= "SI";
$_SESSION['usuario']= $usuario;
$_SESSION['pes']= $pes;
$_SESSION['idcen']= $idcen;
$_SESSION['cen']= $cen;
include ("configuracion.php");
$sql= mysql_query("SELECT * FROM latabla WHERE usuario='$usuario'");
while ($row = mysql_fetch_array($sql) )
{
$idcentro = $row[idcentro];
$centro = $row[centro];
$pes = $row[pes];
}
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();
}
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>
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) )
{
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>
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!= "")
{
_________________________________________________
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.