Sigues sin aclarar como propagas el SID (según tu configuración es lo que ahora falta al ver algo de tu código).
A tu código no le falta nada .. Tu asumes que propagas el SID en cookies (más que nada así lo debes estár haciendo en tu configuración por el tipo de redireccionamiento que usas: javascript). Ya te comenté que si tu sistema te funciona es (probable) por la combinación de: php.ini -> session.use_cookies = ON y que usas un navegador que acepta la cookie que PHP envia con el SID para propagarlo.
Lo peor de esto no es que "no te funcione" sino en no saber "por qué me funciona". Por eso te insisto tanto en que veas como propagas el SID .. que lo entiendas y así sigas revisando otros factores que pueden influir al tiempo de vida de tus sesiones: si ya te digo que "propagas el SID" en cookies (automaticamente las crea PHP por tu configuración) .. si te fijas en tu php.ini (o phpinfo()) veras otras directivas que definen "como" PHP va a crear esa cookie ..sobre todo su tiempo de expiración. Revisalo.
Otro detalle ... por tu seguridad .. no redirecciones con javascript
:
Código PHP:
<?
if($_SESSION['valido']!=1)
{
echo "<script>";
echo "window.location='index.php';";
echo "</script>";
}
usa:
Código PHP:
<?
if($_SESSION['valido']!=1)
{
// redireccion directa con cabeceras HTTP
header ("Location: index.php");
// terminar la ejecución del script en este punto.
exit;
}
Probablemente al usar este método tendrás otro problema según donde uses ese código que se refiere a "cabeceras" y "salida" ya enviada al navegador antes de esa instrucción header(). Si te sucede, tendrías que indicar el código -completo- de tu script junto con el mensaje de error textual que obtengas para indicarte como re-ordenar tu código para que no se origine una "salida" (algo que envias al navegador: HTML, javascript .. un echo "algo" ..etc) antes de ese header().
Si quieres ver los problemas que te comento .. en tu navegador de pruebas, desactiva "javascript" .. veras que NO te redireccionará por qué lo haces en tu código por javascript y NO terminas la ejecución de tu script en ese punto y tu navegador en ese caso no ejecutaría Javascript.
Un saludo,