Con esto genero la cookie:
Código PHP:
if ($_POST['check'] == "on") {
$valorCookie = md5($loginUsername.date("Y-n-j H:i:s"));
// Guardo el valor de la cookie en la base de datos
$updateDATE = sprintf("UPDATE usuarios SET cookie=%s WHERE usuarioID= %s",
GetSQLValueString($valorCookie, "text"),
GetSQLValueString($loginUsuarioID, "int"));
mysql_select_db($database_cnx, $cnx);
$Result1 = mysql_query($updateDATE, $cnx) or die(mysql_error());
// Guardo las cookies en el navegador
setcookie("AP_usuarioID", $loginUsuarioID, time()+(60*60*24*30));
setcookie("AP_cookieID", $valorCookie, time()+(60*60*24*30));
}
Y con esto la valido... es un lio, ya no me entiendo ni yo jeje...
Código PHP:
##############################################
#Controlo la existencia de Cookies
#############################################
//primero tengo que ver si el usuario está memorizado en una cookie
##########################################################################################################################
if (isset($_COOKIE["AP_usuarioID"]) && isset($_COOKIE["AP_cookieID"])) {##########################################################################################################################
//Comprobar que esas variables no estén vacías
$usuario = $_COOKIE["AP_usuarioID"];
$cookie = $_COOKIE["AP_cookieID"];
//Voy a ver si corresponden con algún usuario
mysql_select_db($database_cnx, $cnx);
$LoginRS__query = sprintf("SELECT
usuarioID,
email,
password,
tipoID
FROM
usuarios
WHERE
usuarioID = %s AND
cookie = %s AND
tipoID = 1",
GetSQLValueString($usuario, "int"),
GetSQLValueString($cookie, "text"));
$LoginRS = mysql_query($LoginRS__query, $cnx) or die(mysql_error());
$loginFoundUser = mysql_num_rows($LoginRS);
if ($loginFoundUser > 0) {
$loginStrGroup = mysql_result($LoginRS,0,'tipoID');
$loginUsuarioID = mysql_result($LoginRS,0,'usuarioID');
$loginUsername = mysql_result($LoginRS,0,'email');
if ((!isset($_SESSION['MM_Username'])) && (!isset($_SESSION['MM_Username']))) { // Si no hay variables de sesión las cargo! porque caducaron
//Declaro nuevamente las variables de sesión
$_SESSION['MM_Username'] = $loginUsername;
$_SESSION['MM_UserGroup'] = $loginStrGroup;
$_SESSION['MM_UserID'] = $loginUsuarioID;
$_SESSION['inicio'] = $MM_redirectLoginSuccess;
$_SESSION["ultimoAcceso"] = date("Y-n-j H:i:s");
//Actualizo la fecha del último login del usuario que se registra
$updateDATE = sprintf("UPDATE usuarios SET last_login=%s WHERE usuarioID= %s",
GetSQLValueString(mdsTSlocal($setGMT), "text"),
GetSQLValueString($loginUsuarioID, "int"));
mysql_select_db($database_cnx, $cnx);
$Result1 = mysql_query($updateDATE, $cnx) or die(mysql_error());
}
if (isset($_SESSION['PrevUrl']) && false) {
$MM_redirectLoginSuccess = $_SESSION['PrevUrl'];
}
header("Location: " . $MM_redirectLoginSuccess );
}
} else {##########################################################################################################################
$MM_restrictGoTo = "login.php";
if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_Username'], $_SESSION['MM_UserGroup'])))) {
$MM_qsChar = "?";
$MM_referrer = $_SERVER['PHP_SELF'];
if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&";
if (isset($QUERY_STRING) && strlen($QUERY_STRING) > 0)
$MM_referrer .= "?" . $QUERY_STRING;
$MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer);
header("Location: ". $MM_restrictGoTo);
exit;
} else {
if ($_SERVER['SERVER_NAME']!='localhost') {
## Si no estamos en local verificamos la sesión para determinar si hay que expirarla
//sino, calculamos el tiempo transcurrido
$fechaGuardada = $_SESSION["ultimoAcceso"];
$ahora = date("Y-n-j H:i:s");
$tiempo_transcurrido = (strtotime($ahora) - strtotime($fechaGuardada));
//comparamos el tiempo transcurrido
if ($tiempo_transcurrido >= 1200) {
//si pasaron 20 minutos o más
session_destroy(); // destruyo la sesión
header("Location: login.php?msg=expire"); //envío al usuario a la pag. de autenticación
//sino, actualizo la fecha de la sesión
} else {
$_SESSION["ultimoAcceso"] = $ahora;
}
} // Cierra el if de LOCALHOST asi no expira al realizar las pruebas
}
}
Te recuerdo que la funcion funciona (casi) bien cuando quito estas líneas
Código PHP:
header("Content-Type: ".$ctype);
header("Content-Disposition: attachment; filename=".basename($filename).";" );
Por eso debe haber algún problema con la cookie y los headers que especifico ahí