COOKIES que no se borran.

oFF-sIDE

Hola,

estoy teniendo un problema con unas variables de cookies. Os pongo en contexto. Un pequeño visor de archivos en el que hay un simple index.php idéntico en cada carpeta que lista el contenido de la carpeta y la representa de forma atractiva visualmente hablando, además de filtrar ciertos contenidos en función del tipo de usuario.

Resulta que cuando tengo una página index.php que admite un parámetro GET llamado "action", de modo que si su valor es 'login', reestablezco las variables de session y cookies, me muestra un formulario de login típico de contraseña, sólo la contraseña. Dependiendo de al contraseña los privilegios de usuario serán unos u otros.

Cuando hacemos login, llamamos a esta misma página por POST, y entonces establecemos las variables de SESSION y de COOKIE. El problema viene que al hacer logout, llamo a esa misma página con el parámetro "?action=login" para reestablecer las variables de session y de cookies, para pedir las nuevas con $_SESSION['user'] = 'no' y setcookie("user", "no", time()+100, '');

El estado una vez hago logout es el siguiente:

$SESSION['user'] = 'no';
$
COOKIE['user'] = 'no';

El problema es que si estando en el formulario de login, le doy al logo de la web, hago una llamada de nuevo a index.php, sin la variable GET "action=login", pero con las variables $SESSION['user'] y $COOKIE['user'] con el contenido 'no', supuestamente. Y digo 'supuestamente', porque cuando carga la página, imprimo esas variables y resulta que están con el valor que tenían antes de hacer el logout. He probado también eliminando la cookie, entera, para nada.

¿Cómo es esto posible? ¿Se os ocurre algún posible motivo?

Es decir, en una página establezco el valor: 'no' a la cookie y al darle al botón del logo y volver a entrar en la misma página resulta que su valor vuelve a ser el anterior en lugar de 'no', tanto el suyo como el de la sesión.

Si queréis ver el código, os lo pongo, pero viene a ser un IF detrás de otro IF detrás de otro IF... comprobando primero si hay GET, luego si hay POST, luego si hay COOKIE, y luego si hay SESSION, vamos, que son un montón de líneas sin mucho contenido. Lo que me interesa saber es si hay alguna peculiaridad de las cookies que ocasionan este tipo de problemas.

PD: Sé que es una forma burda, ineficiente y cutre de hacerlo, pero es lo que hay porque no tengo acceso a la configuración PHP para cambiar el tiempo de duración de "session", de modo que el unset_session(); no me sirve porque no es inmediato.

ElRuso

Creo que eso iria mejor en foro dev.

Edit:
Me he rallado o algo, pero juero que el hilo estaba por HW.

1 respuesta
LOc0

Hazte un echo de esas dos variables después de setearlas cuando llames index.php?action=login

Salu2 ;)

1 respuesta
oFF-sIDE

#2 Me has dejado con la duda, igual lo ha movido un administrador, pero yo elegí como tipo de thread "Programas", de eso estoy seguro. Así no sé en cual de los dos lo acabé creando.

#3 Lo he hecho y están bien reiniciadas. Pero cuando le doy al logo.. pluf! Otra vez están con el valor anterior... es súper surrealista. Al final he optado por quitar las cookies y el vínculo del logo :/

LOc0

Perdona que desconfíe, pero este tipo de errores suelen ser por tonterías. ¿Has puesto el echo JUSTO AL FINAL DE TODO? Me refiero, justo antes del ?>

Salu2 ;)

oFF-sIDE

Sí, y no te preocupes por las desconfianzas, muchas veces te partes los sesos pensando en algo y resulta que debías haber usado unas comillas dobles en vez de unas simples. Además, tampoco es que yo sea un guru del PHP, sólo he hecho 4 webs corporativas sencillitas, algo de POO, MySQL y algo de sesiones.

Los 'echo' los he hecho dentro de todos los IFs (tras la escritura de la cookie, eso siempre) y después, justo antes del ?> para comprobar el valor de las variables.

Es una movida que creo que voy a dejar por imposible. Encima, cuando haces logout y le das a "atrás", resulta que la variable de sesión vuelve a tener el valor de antes, pero no tengo acceso a la configuración PHP como para cambiar los tiempos de sesión y el tiempo que se tarda en eliminar las variables en estado "basura".

Nada, creo que no le voy a dar más vueltas que ya llevo casi 2 dias con ello, no es algo crítico. Quito el enlace del logo y arreando.

Gracias por el interés :)

LOc0

Joder, qué raro. Sin poder ver el código tiene pinta de ser cosa del servidor que se hace la picha un lío con las sesiones, pero es bastante raro... ¿Qué navegador usas para las pruebas? Ya por curiosidad, haz un pastebin del código si puedes y pon un link de prueba a la web para conectarme a ver...

Salu2 ;)

oFF-sIDE

Lo he probado en distintos navegadores (Chrome, Firefox, Internet Exporer 8) y en el internet explorer es casualmente el único en el que funciona bien, no es irónico? Jajajajajajaja.

El código creo que ya ni existe, miraré mañana a ver si tengo una copia de seguridad, pero vamos, muchos ifs anidados comprobando Get, Post, Cookie y lo último la Session, tanto con comillas simples como dobles: $COOKIE["user"] y $COOKIE['user'], ahí me di cuenta de que debía usar dobles porque al hacer setcookie lo hacía con comillas dobles. Mañana si eso lo pongo desde el trabajo.

Respecto a links de prueba... ahora mismo con mi corta experiencia no me mola mucho la idea de ir poniendo links y menos de un FTP, porque hay muchos gilipollas suelto, pero weno, veré qué puedo hacer.

Gracias por el interés LOc0 :)

NeB1

Algo me dice que te has dejado

session_start();

en alguno de los archivos por lo de la variable de sesión, vamos, lo habitual es que cuando pasan estas cosas es, como dice L0c0, una soberana tontería.

oFF-sIDE

Sólo hay 1 archivo, index.php, y sí tiene el session_start();

Es uno de los requisitos :/

Ahora mismo estaba intentando arreglarlo creando un logout.php y un login.php por separado pero que sólo existan en la carpeta raíz, pero me ha tocado parar para traducir una documentación, luego seguiré y os comentaré.

oFF-sIDE

Bueno, creo que ya está arreglada toda esta movida.

Al final lo he tenido que hacer con 3 php's: index.php, login.php y logout.php

El problema creo que reside en que aunque tu crees la cookie, ésta no estará disponible hasta la siguiente vez que cargues la página, por eso no funcionaba. Ahora ya está todo ok, excepto lo de darle "Atrás" tras desconectar y que mantenga la información de usuario.

Gracias por el interés.

Usuarios habituales

  • oFF-sIDE
  • NeB1
  • LOc0
  • ElRuso