Muchas gracias a los dos.
abimaelrc, no utilizo las sesiones más que nada porque ya las tengo "ocupadas" para otro tipo de funciones, y no me gusta ir mezclando, que así luego me pasa, que tengo un lío entre $_SESSION, $_SERVER, $_COOKIE, $_POST, $_GET,... pero bueno, en realidad me queda más claro, además de que me mola el efecto que da que te salga el pop up del navegador al hacer la validación mediante el servidor (si me decís cómo conseguir ese resultado con otros medios, soy todo oídos).
santhy, en primer lugar, la contraseña evidentemente encriptada y el login viajan en cookies cuyo nombre está también encriptado, gracias por el apunte ;)
Finalmente no te he hecho caso con el tema de usar un ID de sesión, ya que el navegador que usaba efectivamente sólo la cambiaba cuando lo cerraba, así que me he sacado de la manga una cookie con valores 0 o 1 que me dice si no he hecho logout o sí y, a partir de eso, mi función de login ya dilucida qué hacer.
Probablemente sea poco ortodoxo, pero funciona de la manera que yo quiero (con las pruebas que he hecho, que lo mismo mañana lo usa otro y peta), así que me vale.
Bueno, finalmente, aquí os dejo con el código:
Función de login
Código PHP:
function login() {
$loginkey = md5('login');
$passwordkey = md5('password');
if ($_COOKIE['session'] == 0 && isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
mysql_connect('a ti te lo voy a decir', 'venga, sí, hombre...', 'y qué más') or die('Unable to connect MySQL server!');
mysql_select_db('va a ser que no') or die('Unable to select requested database!');
mysql_query("SET NAMES 'utf8'");
$query = mysql_query("SELECT * FROM `users` WHERE `login` = '".$_SERVER['PHP_AUTH_USER']."'");
if ($row = mysql_fetch_row($query)) {
if ($row[5] == md5($_SERVER['PHP_AUTH_PW'])) {
setcookie($loginkey, $row[4], time() + 7776000); // 90 días dura la cookie
setcookie($passwordkey, $row[5], time() + 7776000);
setcookie('session', 1, time() + 7776000);
return $row;
}
else {
echo 'Contraseña incorrecta';
echo '<br />';
echo '<button id="button" type="button" onclick="location.href=\'index.php\'">Volver al inicio</button>';
exit();
}
}
else {
echo 'Usuario no existente en la base de datos';
echo '<br />';
echo '<button id="button" type="button" onclick="location.href=\'index.php\'">Volver al inicio</button>';
exit();
}
mysql_free_result($query);
mysql_close();
}
else if (isset($_COOKIE['session']) && isset($_COOKIE[$loginkey]) && isset($_COOKIE[$passwordkey])) {
mysql_connect('a ti te lo voy a decir', 'venga, sí, hombre...', 'y qué más') or die('Unable to connect MySQL server!');
mysql_select_db('va a ser que no') or die('Unable to select requested database!');
mysql_query("SET NAMES 'utf8'");
$query = mysql_query("SELECT * FROM `users` WHERE `login` = '".$_COOKIE[$loginkey]."' AND `password` = '".$_COOKIE[$passwordkey]."'");
if ($row = mysql_fetch_row($query)) {
setcookie($loginkey, $row[4], time() + 7776000); // 90 días dura la cookie
setcookie($passwordkey, $row[5], time() + 7776000);
setcookie('session', 1, time() + 7776000);
return $row;
}
else {
//Destruimos las cookies.
setcookie($loginkey, 'x', time() - 3600);
setcookie($passwordkey, 'x', time() - 3600);
setcookie('session', 1, time() - 3600);
}
mysql_free_result($query);
mysql_close();
}
else {
header('WWW-Authenticate: Basic realm="Mobail Apps SL"');
if (strpos($_SERVER['HTTP_USER_AGENT'], 'Chrome')) {
if ($_COOKIE['session'] == 1 && $_COOKIE['chrome_control'] != 1) {
setcookie('session', 1, time() + 7776000);
setcookie('chrome_control', 1, time() + 7776000);
}
else {
setcookie('session', 0, time() + 7776000);
}
}
else if (strpos($_SERVER['HTTP_USER_AGENT'], 'Safari')) {
if ($_COOKIE['session'] && $_COOKIE['safari_control'] != 1) {
setcookie('session', 1, time() + 7776000);
setcookie('safari_control', 1, time() + 7776000);
}
else {
setcookie('session', 0, time() + 7776000);
}
}
else {
setcookie('session', 0, time() + 7776000);
}
header('HTTP/1.1 401 Unauthorized');
echo 'Lo sentimos, pero no está autorizado para ver esta página';
echo '<br />';
echo '<button id="button" type="button" onclick="location.href=\'index.php\'">Volver al inicio</button>';
exit();
}
}
Función de logout
Código PHP:
$loginkey = md5('login');
$passwordkey = md5('password');
setcookie('session', 1, time() + 7776000);
if (isset($_COOKIE['chrome_control'])) {
setcookie('chrome_control', 0, time() - 3600);
}
if (isset($_COOKIE['safari_control'])) {
setcookie('safari_control', 0, time() - 3600);
}
setcookie($loginkey, 'x', time() - 3600);
setcookie($passwordkey, 'x', time() - 3600);
echo 'Se ha deslogueado correctamente';
echo '<br />';
echo '<button id="button" type="button" onclick="location.href=\'index.php\'">Volver al inicio</button>';
exit();
Evidentemente, se admiten reclamaciones, quejas, insultos, improperios y demás. Un saludo.
PD Edit 1: si antes lo digo... los códigos que tenía antes colgados no funcionaban muy para allá. Finalmente lo he solucionado, aunque he tenido que verme forzado a meter parches para Safari y Chrome, pero si funciona...