¿Por qué no cerrar una pestaña Eliminar una cookie de sesión?

Estoy usando cookies basadas en sesiones con mi sitio web. Para mi completa sorpresa, noté que si establecía una cookie de sesión (no una cookie persistente), cierro una pestaña y luego volví a conectar con el sitio, las cookies de sesión todavía están allí. Eso no es lo que hubiera esperado, en realidad. Hubiera esperado que se eliminaran las cookies de la sesión.

Si cierra el navegador, se elimina una cookie de sesión, entonces ¿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 el problema de esta sesión? Desafortunadamente, el evento onbeforeunload en la etiqueta BODY no es útil aquí porque cuando haces clic fuera de una página, se dispara ese evento, no solo cerrando una pestaña.

    La cookie de sesión es por proceso, no por ventana. Entonces, incluso si seleccionas Nueva ventana, obtendrás la misma identificación de sesión. Este comportamiento tiene sentido. No le gustaría que un usuario vuelva a iniciar sesión cada vez que abriera una nueva ventana mientras navegaba por su sitio.

    No estoy al tanto de ninguna manera real alrededor de esto.

    Esto es por diseño y tratar de cambiarlo es una muy mala idea. ¿Qué sucede si un usuario abre un enlace en una pestaña nueva 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. necesita hacer su propia infraestructura de “mini-sesión”;
    3. están probablemente en un mundo de daños y errores.

    También puede escribir un javascript que detecta cuando se cierra una pestaña y eliminar la cookie en el javascript

    El almacenamiento web de sesión se puede usar en lugar de las cookies si necesita depender del cierre de tabs.

    Encontré un trabajo alrededor.

    Estoy trabajando en ASP.NET C# . Tengo una Master Page para todas las páginas del sitio, excepto la página de inicio de Login . En el Page Load event obtengo la Url de la página de referencia y verifico si contiene la raíz del sitio; si no, redirijo a la página de inicio de Login y, dado que no tiene esa Master Page , aparece.

    Esto funciona si trato de acceder a una página desde otro sitio o si ingreso la Url a la casilla de dirección del navegador. Por lo tanto, si cierra la pestaña e intenta volver a ingresar desde otra pestaña o volver a abrir la pestaña, aunque la cookie no se haya cancelado, no podrá volver a ingresar al sitio sin pasar por el Login . Esto también funciona incluso si no ha cerrado la pestaña y navega 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 el sitio no hay problema, incluso si abre un enlace a otra página en el sitio a otra pestaña que se abre.

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

    Esto no funcionará cuando un usuario navegue a otro sitio en la misma pestaña y presiona los navegadores back to botón porque eso funciona en el 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.