Asqueado con las sesiones
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
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
