Asqueado con las sesiones

xicojoven
18 de Abril del 2006
Hola, llevo mucho tiempo intentando que me funcionen bién las sesiones/Cookies en una página web que estoy realizando, y por fin he conseguido que se mantengan siempre, y que el usuario una vez que se loguea, no tenga que hacerlo cada vez que para el ordenador... Pero ahora no le da la gana de desloguearse cuando quiero hacerlo. Se borra la cookie del servidor, pero se ve que se mantiene en el PC, yno hay manera... Llevo ya más de 2 semanas con esto, y ahhhhhhhhh!! :S

Os dejo el codigo que tengo en mi sesiones.php
---------------------------------------------------------------------


//Variable importantisima. Hace que el SID no se pase por la url. lo pasa a través de cookies
ini_set("session.use_trans_sid","0");
//ini_set("session.use_only_cookies","1");
//session.use_trans_sid = 1;
// session.use_only_cookies = 1;




/*******************Diferentes variables para que con el IE caduque la sesión al cerrar ventana**************/
/*// HTTP/1.1
header("Cache-Control: no-store, no-cache, must-revalidate, proxy-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Expires: Sat, 01 Jan 2000 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
*/
// HTTP/1.0
header("Pragma: no-cache");

//Tipo de cache
session_cache_limiter('private, must-revalidate');
session_cache_expire(1);
if(isset($_COOKIE['EntraPagina']) && $_COOKIE['ses_activo']==1)
{
//echo"<font color=white>Existe la cookie</font>";
$comprobar_cookie=1;
session_id($_COOKIE['ses_session_id']);
$id_sesion_=session_id();


}
else
{
//echo"<font color=white>no Existe la cookie</font>";
$comprobar_cookie=0;
$id_sesion_=md5(rand());
}


//Definimos el nombre de sesion
session_name("EntraPagina");
//Cookie nombre
setcookie("EntraPagina", "1", time() + (180 * 86400), "", "",0);
//define("_PATH_TMP", "/tmp");
//ini_set('session.save_path', _PATH_TMP);
//setcookie("Prueba", "1", time() + (180 * 86400), "", "",0);
//Comenzamos la sesión
session_start($id_sesion_);
//echo"$id_sesion_";



if($_GET['ir']=="login" && $_GET['accion']=="cerrar")
{
//La sesion actual
borrar_cookie();

}


//La sesion actual
$sesion_actual=session_id();

//Variable para las cookies
session_set_cookie_params(0, "/", $HTTP_SERVER_VARS["HTTP_HOST"], 0);


//Comprobamos si viene de hacer login
if($_SESSION['ses_modificar_cookies_login']==1)
{
setcookie("ses_nick", $_SESSION['ses_nick'], time() + (180 * 86400), "", "",0);
setcookie("ses_posts", $_SESSION['ses_posts'], time() + (180 * 86400), "", "",0);
setcookie("ses_logueado", $_SESSION['ses_logueado'], time() + (180 * 86400), "", "",0);
setcookie("ses_idlogin", $_SESSION['ses_idlogin'], time() + (180 * 86400), "", "",0);
setcookie("ses_id_registro", $_SESSION['ses_id_registro'], time() + (180 * 86400), "", "",0);
setcookie("ses_admin", $_SESSION['ses_admin'], time() + (180 * 86400), "", "",0);
//Para dejarla otra vez a cero
$_SESSION['ses_modificar_cookies_login']=0;
}



//Comprobamos si admite variables de sesión o cookies
if(!empty($_COOKIE['EntraPagina']))//Admite cookies
{
//echo"Tu pagina SI admite cookies";

//Comprobamos si ya había una cookie guardada
if($comprobar_cookie==1)//Estaba guardada. Sacamos datos..
{

//setcookie("ses_session_id", "$sesion_actual", time() + (180 * 86400), "", "",0);
//echo"<font color=white>Pri: " . $_COOKIE['ses_session_id'];
//echo"<br> id:" . session_id() . " fin ";
$_COOKIE['ses_session_id']=$sesion_actual;
}
else //No estaba guardada.Inicializamos variables
{

//Comprobamos si soporta o no cookies
if($_COOKIE['EntraPagina']==1)//Soporte cookies. Inicializamos variables de cookies & sesiones
{
setcookie("ses_activo", "1", time() + (180 * 86400), "", "",0);
setcookie("ses_area_priv", "0", time() + (180 * 86400), "", "",0);
setcookie("ses_nick", "Gamer", time() + (180 * 86400), "", "",0);
setcookie("ses_posts", "0", time() + (180 * 86400), "", "",0);
setcookie("ses_logueado", "0", time() + (180 * 86400), "", "",0);
setcookie("ses_idlogin", "0", time() + (180 * 86400), "", "",0);
setcookie("ses_id_registro", "0", time() + (180 * 86400), "", "",0);
setcookie("ses_admin", "0", time() + (180 * 86400), "", "",0);
setcookie("ses_id_admin", "0", time() + (180 * 86400), "", "",0);
setcookie("ses_tipo_admin", "0", time() + (180 * 86400), "", "",0);
setcookie("ses_language", "spanish", time() + (180 * 86400), "", "",0);
setcookie("ses_session_id", "$sesion_actual", time() + (180 * 86400), "", "",0);

//Algunos navegadores como el opera son un poco... Inicializar sesiones, porque pueden abrir una cookie
//Pero no la guardan.entonces da fallo
$_SESSION['ses_activo']=1;//Para saber si ha iniciado sersion

//Activamos variable = 0 para que no puedan tener acceso total a las imagenes
$_SESSION['ses_area_priv']=0;//
$_SESSION['ses_nick']="Gamer";//Activamos como nombre de usuario no registrado a Gamer
$_SESSION['ses_posts']=0; //Numero de posts realizados
$_SESSION['ses_logueado']=0; // Para saber si está logueado
$_SESSION['ses_idlogin']="";//Numero único de sesión
$_SESSION['ses_id_registro']=0;//El id de registro que tiene en foros
$_SESSION['ses_admin']=0; // Para saber si es admin
$_SESSION['ses_id_admin']=0; // Para saber la id del admin
$_SESSION['ses_tipo_admin']=0; //Para sabe el tipo de admin que es
$_SESSION['ses_language']="spanish";
$_SESSION['ses_session_id']=$sesion_actual;
$_SESSION['ses_modificar_cookies_login']=0;
}
else//No soporte cookies.Inicializamos variables de sesión (Ya estába hecho)
{


}
}//Termina de comprobar si ya había una cookie guardada

}
else
{

/*------------------------------No admite cookies. Pasamos a utilizar sesiones ------------------------*/



//Comprobamos fechas de último acceso
if(!isset($_SESSION["ultimoAcceso"]))
{
$_SESSION["ultimoAcceso"]= date("Y-n-j H:i:s");
}
/*else
{
$fechaGuardada = $_SESSION["ultimoAcceso"];
//Vamos a hacer que cierre sesión obligatoriamente si ha estado 10 minutos inactivo
$ahora = date("Y-n-j H:i:s");
$tiempo_transcurrido = (strtotime($ahora)-strtotime($fechaGuardada));

//comparamos el tiempo transcurrido
if($tiempo_transcurrido >= 1728000)
{
//si pasaron 10 minutos o más
//session_destroy(); // destruyo la sesión
comprobar_caducidad_sesion();

session_start();
}
else
{
$_SESSION["ultimoAcceso"] = $ahora;
}
}*/


if(!isset($_SESSION['ses_activo']) || $_SESSION['ses_activo']==0)
{

$_SESSION['ses_activo']=1;//Para saber si ha iniciado sersion


$_SESSION['ses_area_priv']=0;//
$_SESSION['ses_nick']="Gamer";//Activamos como nombre de usuario no registrado a Gamer
$_SESSION['ses_posts']=0; //Numero de posts realizados
$_SESSION['ses_logueado']=0; // Para saber si está logueado
$_SESSION['ses_idlogin']="";//Numero único de sesión
$_SESSION['ses_id_registro']=0;//El id de registro que tiene en foros
$_SESSION['ses_admin']=0; // Para saber si es admin
$_SESSION['ses_id_admin']=0; // Para saber la id del admin
$_SESSION['ses_tipo_admin']=0; //Para sabe el tipo de admin que es
$_SESSION['ses_language']="spanish";
$_SESSION['ses_session_id']=$sesion_actual;
$_SESSION['ses_modificar_cookies_login']=0;
}



}

---------------------------------------------------------------------


La función borrar_cookie() es esta:


function borrar_cookie()
{
$_COOKIE['ses_nick']="Gamer";
$_COOKIE['ses_posts']=0;
$_COOKIE['ses_logueado']=0;
$_COOKIE['ses_idlogin']=0;
$_COOKIE['ses_id_registro']=0;
$_COOKIE['ses_admin']=0;

/*setcookie("ses_nick","",time()-60);
setcookie("ses_posts","",time()-60);
setcookie("ses_logueado","",time()-60);
setcookie("ses_idlogin","",time()-60);
setcookie("ses_id_registro","",time()-60);
setcookie("ses_admin","",time()-60);*/
//$sesion_actual=session_id();
unset($_COOKIE['EntraPagina']);
setcookie(session_name() ,"",0,"/");
unset($_COOKIE[session_name()]);
$_SESSION = array();
session_unset();

session_destroy();
$_SESSION = array();
setcookie ('PHPSESSID', '', time-300, '/', '', 0);

/*DeleteSessionID($sesion_actual);


$id_sesion_=md5(rand());
session_start($id_sesion_);
echo "Has cerrado sesión correctamente";*/
}


Habrán muchos fallos de probar y probar cientos de vecez...pero ya no se que hacer :'(

Lo que quiero hacer es que las cookies se conserven siempre, hasta que el usuario quiera desloguearse. Y las sesiones... cuando no admite cookies, al final no sirve de nada, lo que he hecho es realizar una comprobación en la página, en las secciones que tienen que loguearse, así que directamente si no admiten cookies no les dejo. Y por ahora se me mantienen..pero no consigo borrarlas!! Y para colmo, cuando intento borrar la cookie con php, se borran algunas variables, pero otras no... por ejemplo, la variable del nick, siempre se queda intacta..


A ver si algún alma caritativa puede ayudarte, o a ver si sabe de algún código válido.. porque por internet, solo encuentro trocitos por aquí y por allá...


Gracias

xicojoven
18 de Abril del 2006
nadie m dice nada? :-(