Estoy haciendo un panel de administración con un sistema de login. Todo funciona perfectamente, pero al ejecutarlo desde Firefox o Internet Explorer no funciona.
El problema es el siguente: solo en Chrome se genera la cookie, he comprobado que Firefox e IE tienen las cookies habilitadas.
Que puede estar fallando?
Esta es la función de login
Código PHP:
/**
* Comprueba si el usuario y clave son correctos, en caso de serlo genera un session y una cookie "salteada".
* @global string $salt
* @global string $saltCookie
* @param string $user
* @param string $pass
*
* @return int estado
*/
function login ($user,$pass)
{
$user = mysql_escape_string($user);
$pass = mysql_escape_string($pass);
if(strlen($user)<4 || strlen($pass)<4) return -3;
global $salt;
$pass = sha1($salt.md5($pass));
global $hostsql;
global $usersql;
global $passwdsql;
$conexion=mysql_connect($hostsql, $usersql,$passwdsql ,false);
$bd = mysql_select_db(DATABASENAME,$conexion);
mysql_query("SET NAMES 'utf8'");
$sql = "select user_id from user_log where UPPER(username)='".strtoupper($user)."' and passwd='".$pass."'";
$result = mysql_query($sql,$conexion);
if(mysql_affected_rows()<=0 || !$result) return -1; //user repetido
$row = mysql_fetch_array($result);
$user_id = $row['user_id'];
$_SESSION['usuario']=$user_id;
global $saltCookie;
$cookie = sha1($saltCookie.md5($user_id.date("Y-d-m h:i:s")));
setcookie("admin",$cookie,time()+3600);
$loginin = date("Y-m-d H:i:s");
$sql2 = "update user_log set cookie='".$cookie."',sesion='" . $loginin . "' where `user_id`='".$user_id."'";
$result2 = mysql_query($sql2,$conexion);
$_SESSION['usuario']=$user_id;
return true;
}
Código PHP:
function seguridadIndex()
{
if (isset($_SESSION['usuario']))
{
header("Location: http://" . $_SERVER['HTTP_HOST'] . "/editor/");
exit();
}
else if( isset($_COOKIE['identificado']))
{
$cookie = limpiar($_COOKIE['identificado']);
$user_id = comprobarCookie($cookie);
if($user_id)
{
header("Location: http://" . $_SERVER['HTTP_HOST'] . "/editor/");
exit();
}
}
}
El resto de funciones del panel utilizan esta función para la seguridad
Código PHP:
function seguridad(){
if (isset($_SESSION['usuario']))
{
global $hostsql;
global $usersql;
global $passwdsql;
$conexion=mysql_connect($hostsql, $usersql,$passwdsql ,false);
$bd = mysql_select_db(DATABASENAME,$conexion);
mysql_query("SET NAMES 'utf8'");
$userid = $_SESSION['usuario'];
$sql = "SELECT cookie FROM user_log where user_id='". $userid ."'";
$result = mysql_query($sql,$conexion);
if(!$result || mysql_affected_rows()<1) {
forcelogout();
}
else {
$row = mysql_fetch_array($result);
if ($row ['cookie'] == $_COOKIE['admin']) {
return;
}
else {
forcelogout();
}
}
}
else if( isset($_COOKIE['admin']))
{
$cookie = limpiar($_COOKIE['admin']);
$user_id = comprobarCookie($cookie);
if(!$user_id)
{
forcelogout();
exit();
}
}
else
{
forcelogout();
exit();
}
}
Código PHP:
function forcelogout() {
session_start ();
$_SESSION = array();
$session_name = session_name();
unset($_SESSION['usuario']);
session_destroy();
if ( isset( $_COOKIE[ $session_name ] ) ) {
setcookie($session_name, '', time()-3600, '/');
}
if(isset($_COOKIE['admin'])){
setcookie('admin', '', time()-3600, '/');
}
header("Location: http://" . $_SERVER['HTTP_HOST'] . "/login/index.php");
exit();
}
Muchas gracias de antemano por vuestro tiempo