Pregunta

Estoy utilizando cookies basadas en sesión con mi sitio web. Para mi completa sorpresa, noté que si configuraba una cookie de sesión (no una cookie persistente), cerraba una pestaña y volvía a conectarme al sitio, las cookies de sesión aún están allí. Eso no es lo que hubiera esperado, en realidad. Hubiera esperado que las cookies de la sesión fueran eliminadas.

Si cierra el navegador, se elimina una cookie de sesión, ¿por qué no cerrar una pestaña para obtener el mismo resultado?

Por lo tanto, estoy usando PHP5 y jQuery. ¿Hay algo que pueda hacer para que cuando se cierre una pestaña pueda solucionar este problema de sesión? Desafortunadamente, el evento onbeforeload en la etiqueta BODY no es útil aquí porque cuando haces clic fuera de una página se activa ese evento, no solo cerrando una pestaña.

¿Fue útil?

Solución

La cookie de sesión es por proceso, no por ventana. Por lo tanto, incluso si seleccionó Nueva ventana, obtendría la misma ID de sesión. Este comportamiento tiene sentido. No querrá que un usuario vuelva a iniciar sesión cada vez que abre una nueva ventana mientras navega por su sitio.

No estoy enterado de ninguna manera real de evitar esto.

Otros consejos

Esto es por diseño y tratar de cambiarlo es una muy mala idea. ¿Qué sucede si un usuario abre un enlace en una nueva pestaña y lo cierra? ¿Debería destruirse la sesión en la pestaña original? ¡Por supuesto no! Esto demuestra por qué ni siquiera deberías pensar en esto.

Una sesión finaliza cuando se cierra la última ventana del navegador. Si quieres algo más, tú:

  1. no quiero sesiones;
  2. necesitas crear tu propia " mini-sesión " infraestructura;
  3. es probable que se encuentren en un mundo de heridas y errores.

También puede escribir un javascript que detecte cuándo se cierra una pestaña y eliminar la cookie en el javascript

El almacenamiento web de sesión puede utilizarse en lugar de cookies si necesita depender del cierre de la pestaña.

Encontré una solución alternativa.

Estoy trabajando en ASP.NET C # . Tengo un Master Page para todas las páginas del sitio excepto para la página Login . En el Master Page Sever Page Load event obtengo el Url de la página de referencia y verifico si contiene la raíz del sitio, si no redirigir a la página Login y, como no tiene la Master Page , se muestra.

Esto funciona si intento acceder a una página desde otro sitio o si ingreso el Url en el cuadro de dirección del navegador. Entonces, si cierra la pestaña e intenta volver a ingresar desde otra pestaña o la vuelve a abrir, incluso aunque la cookie no haya sido eliminada, no podrá volver a ingresar al sitio sin pasar por Login . Esto también funciona incluso si no ha cerrado la pestaña y su navegación entre diferentes sitios en la misma pestaña.

Este es el código

   if (Request.UrlReferrer == null || !Request.UrlReferrer.AbsoluteUri.ToString().Contains("root"))
        {
            Response.Redirect("~/Account/Login.aspx");
        }

Al navegar desde dentro del sitio, no hay problema, incluso si abres un enlace a otra página del sitio a otra pestaña que se abre.

Si desea asegurarse adicionalmente de que puede eliminar la sesión y la cookie de autenticación en esa cláusula if antes de redirigir a la página Login .

Esto no funcionará cuando un usuario navegue a otro sitio en la misma pestaña y presione el botón de los navegadores porque funciona en la caché y no envía automáticamente una solicitud al servidor.

Por lo tanto, esto no elimina la sesión o la cookie de autenticación al cerrar la pestaña, pero puede ayudar a evitar que se vuelva a ingresar al sitio sin iniciar sesión después de cerrar la pestaña.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top