PDA

Ver la Versión Completa : Sesiones


David
28-02-2007, 19:02:11
Hola

Tengo 3 paginas web .

La primera index.html :

<form action="comprobar.php" method="post">
Usuario : <input type="Text" name="nombre"><br>
Clave : <input type="Password" name="clave"><br>
<input type="Submit" value="Enviar">
</form>

la segunda comprobar.php :

session_start();
$query = mysql_query($consulta,$connect);
$rdo = mysql_num_rows($query);
if ($rdo == 0){
print('Error de identificación');
print(' <META HTTP-EQUIV="REFRESH" CONTENT="5;URL=index.html"> ');
}else {
$_SESSION['nombre'] = $_POST['nombre'];
?>
<META HTTP-EQUIV="REFRESH" CONTENT="0;URL=pefil.php">
<?php
}
mysql_close($connect)


y la tercera perfil.php


session_cache_expire(120);
sesion_start();
if ($_SESSION['nombre'] == ''){
print('<META HTTP-EQUIV="REFRESH" CONTENT="0;URL=index.html">');
}

print $_SESSION['nombre'];




En la primera página pone el nombre de usuario y contraseña , y va a la página comprobar.php , si el nombre de usuario y contraseña no esta en la base de datos , pues regresa a index.html , si esta bien , va a perfil.php.

Si accede directamente a perfil.php , al ser $_SESSION['nombre'] = '' , pues regresa al principio .

El caso es que , no sé donde hay que poner varias cosas , por ejemplo , si pasa un tiempo (2 minutos por ejemplo) sin hacer nada y le da a actualizar al navegador (ya en la página index.php) , pues quiero que se acabe la sesión y vuelva al principio.

También quiero saber si el código simple que he puesto esta bien o no .

Otra cosa , como puedo saber las veces que un usuario ha iniciado sesión y guardarlo en algún campo de mysql .

Un saludo

kayetano
28-02-2007, 19:28:23
Hola

si pasa un tiempo (2 minutos por ejemplo) sin hacer nada y le da a actualizar al navegador (ya en la página index.php), pues quiero que se acabe la sesión y vuelva al principio.
Ni idea, supongo que si caduca la sessión se generará un error de página y se podrá indicar en el servidor APACHE que cuando suceda ese numero de error muestre una página concreta. Esto igual lo podrías hacer con cookies, busca en el foro porque este tema se trató hace poco tiempo.
Por otro lado, veo mas lógico que cambies el orden de estas dos funciones:

sesion_start();
session_cache_expire(120);

No estoy muy seguro si sirve para algo pero parece más lógico primero iniciar la sesión y luego modificar alguno de sus valores de configuración.

También quiero saber si el código simple que he puesto esta bien o no .
Hombre, mal lo que se dice mal yo no lo veo, lo que si que veo es un uso un poco raro de las etiquetas META cuando en PHP existen otras alternativas:
session_start();
$query = mysql_query($consulta,$connect);
$rdo = mysql_num_rows($query);
if ($rdo == 0){
header( "Location: index.php?error=x" );
exit();
}else {
$_SESSION['nombre'] = $_POST['nombre'];
header( "Location perfil.php" );
exit();
}


Otra cosa , como puedo saber las veces que un usuario ha iniciado sesión y guardarlo en algún campo de mysql .
Simple, pones un campo en el prefil del usuario y lo utilizas como contador, cada vez que el usuario inicie una sesion solo debes hacer:
UPDATE usuarios SET inicio_sesion = inicio_sesion + 1 WHERE id = x

David
28-02-2007, 20:01:48
Si pongo header en lugar de las etiquetas <meta>

me sale este error :

Warning: Cannot modify header information – headers already sent by... on line 22

Otra cosa si al insertar mal el nombre o password , le reenvio a index.html . Hay alguna forma , que le salga un "mensaje de nombre de usuario incorrecto" en index.html cuando viene de vuelta de la página verificar.php , por que no corresponde el usuario .

kayetano
28-02-2007, 20:11:08
Hola

Warning: Cannot modify header information – headers already sent by... on line 22
Las cabeceras (headers) son lo primero que se deben enviar, es decir no debes mandar nada de HTML (ni siquiera un espacio) antes que las cabeceras.

Otra cosa si al insertar mal el nombre o password , le reenvio a index.html . Hay alguna forma , que le salga código incorrecto en index.html cuando viene de vuelta de la página verificar.php , por que no corresponde el usuario .
Pues como te he puesto en el ejemplo anterior:
if ($rdo == 0){
header( "Location: index.php?error=x" );
exit();
} ...
pasando un parametro a index.php puedes identificar el error, lo puedes indicar simplemente con un número y luego en el código de index.php compruebas si existe la variable $error y dependiendo de su valor muestras un mensaje u otro.

David
28-02-2007, 22:05:33
if ($rdo == 0){
header( "Location: index.php?error=x" );
exit();
} ...


Esta es la parte que no me sale . pongo por ejemplo

location.php?error=1

en la pagina index.php

pongo algo así :

if (isset($error)){
print('nombre de usuario incorrecto..');
}

// también he probado con

if ($error ==1){
print('nombre de usuario incorrecto..');
}



la pregunta es si el parametro que se pasa después de ? , es una variable ??

roman
28-02-2007, 23:25:04
Acuérdate del Register Globals que te comentó (http://www.clubdelphi.com/foros/showpost.php?p=184979&postcount=11) dec. Tanto si enviamos datos con un formulario como si los enviamos en la línea de direcciones, los valores ya no son accesibles directamente en PHP en forma de variables. En el caso de un formulario (si usa el método POST), debes usar el arreglo $_POST, y en el caso de la línea de direcciones debes usar $_GET.

// Saludos

David
01-03-2007, 00:18:48
ya me sale .

Sabeis de algún buen manual para php5 ? por que los que tengo son de php4 y parece que esta muy cambiado el tema de las sesiones y de las variables .

por ahí he visto en inglés , no sé si sabeis de alguno bueno en español