Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Almacenamiento de passwords en SQL

Iniciado por yens, 12 de Noviembre de 2006, 02:51:30 AM

« anterior - próximo »

MrK

Cita de: "yEnS"
"cannot modify header information - headers already sent by (output started at /home/blabla/ingresar.php:9) in /home/blabla/ingresar.php on line 38
"cannot modify header information - headers already sent by (output started at /home/blabla/ingresar.php:9) in /home/blabla/ingresar.php on line 39

los headers se envian al cliente antes de que se envie ninguna otra cosa.  De lo que se te esta quejando el php es que has enviado alguna cosa (ya sea un texto, o el tag inicial de html, o un simple espacio) y despues estas intentando cambiar los headers (y no se puede, piltrafilla)

mirate la linea y fichero donde dice "output started", y prueba de meter las cookies antes de esa linea, a ver si hay suerte :)

yens

No llego a entender lo que quieres decir con los headers, yo tengo incrustrado codigo php en el html de la siguiente manera:

Citar
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Comprobacion de credenciales</title>
</head>
<body>
<?php
//conectamos con la base de datos

loquesea...      
            
//asignamos a variables los resultados para trabajar con ellos
$nick_temp = htmlentities($_REQUEST["nick"]);
$password_temp = md5($_REQUEST["password"]);
$nombre_temp = $_REQUEST["nombre"];
$email_temp = htmlentities($_REQUEST["email"]);
//
//si nick y pass no estan en blanco
if(trim($nick_temp) != "" && trim($password_temp) != "")
{
$nickN = $nick_temp;
$passN = $password_temp;

//si coinciden las credenciales
$resultado = mysql_query("SELECT password FROM usuarios WHERE nick= '$nick_temp'");
//guardamos datos del registro en $registro del nick seleccionado si existe
if($registro = mysql_fetch_array($resultado))
{
//comprobamos si password coincide, pues el nick si
if($registro["password"] == $passN)
{
//establecemos cookies para nick y password de 90 días
setcookie("usNick",$nickN,time()+7776000); --->linea 38
setcookie("usPass",$passN,time()+7776000); --->linea 39
?>
Login correcto, redigiriendo a la página principal...
<SCRIPT LANGUAGE="javascript" type="text/javascript">
location.href = "index.php";
</SCRIPT>
<?php
}
else
{
echo "Password incorrecto";
}
}
else
{
echo "El nick proporcionado no está registrado, por favor registre o introduzca un nick correcto.";
}
mysql_free_result($resultado);
}
else
{
echo "Debe especificar un nick y password.";
}
//cerramos conexion a base de datos
mysql_close();
?>
</body>
</html>

No entiendo a que te refieres con los headers si a las simples etiquetas html o a que!

jazcks

el error es claro, estas enviando al navegador el DOCTYPE y parte de codigo html antes de llegar a mandar las cookies por el header.

deberías hacer algo asi:

<?phpinicializacion, crear sesion o cookies?>


<html>
<head>
...blabla...

<?phpmas cosas en php?>

..mas html por aqui...
</html>


y bueno, he estado leyendo lo que intentas hacer y yo no guardaria con cookies el password, realmente no es necesario.
Yo lo que hago es:
-LOGIN:envio por javascript el user y password en md5
-php lo recibe y comprueba el usuario y tal...
-si todo correcto, creo una session en php
-redirijo con header(...) a la pagina que toque (la despues del login ok)

para crear una sesion:
session_start();
$_SESSION['login_ok'] = 1;
$_SESSION['user'] = $user;
session_write_close();

y esas variables (login_ok, user) se mantienen en las otras paginas php dentro de $_SESSION hasta que tu cierres la sesion.
en php está todo, mirate los ejemplos y comentarios de la gente: http://es2.php.net/manual/es/ref.session.php

yens

Vale, lo veo mas claro asi, muchas gracias! Ya posteare los avances ;D

yens

Bueno, al final he conseguido trabajar con sesiones, pero como soy así de cabezón... también he probado a volver a intentarlo con las cookies porque considero que para lo que necesito son más útiles y prácticas asi que.. lo conseguí!! :D

Si os interesa por futuros problemas que podais tener os resumo en que consiste lo que hice:
Citar
- Cuando el usuario se logea, creo las 2 cookies de nick y pass y les asigno los valores, comprobando previamente si existen en la base de datos etc.
- Compruebo si existen las dos cookies de password y nick, si es asi, se dan las opciones de cerrar sesion, y demas opciones del menu de usuario.
- Si se cierra la sesion, modifico por $_GET la variable $_GET['logout'] a true y "mato" las dos cookies utilizadas.

Supongo que ya casi todos sabréis como va, pero weno por si alguno le interesase xD!

jazcks

tengo curiosidad xDD, en qué página o aplicación web son más útiles las cookies que las sesiones?

si lo que quieres es hacer que no tengas que loggearte al cabo de un tiempo, aunque cierres el navegador, guarda una cookie con, por ejemplo "login = ok", pero que no guarde información sensible como la pass, ademas te evitas hacer una consulta sql.

yens

No utilizo mas que una vez la consulta por login de usuario.

Me resulta mas bien comodo, no tener que usar los session_start() al inicio de cada pagina, o que el usuario ya este logeado al entrar en la web, quizas me exprese mal. Pero lo bueno es que me han funcionado los dos metodos xD!

zupervaca

Editado: No me di cuenta que habia mas de una pagina :lol: sorry por el post
Si algun admin ve este mensaje que lo borre






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.