¿Cuál es típicamente la fecha de caducidad de una cookie de sesión?

10

Necesito crear una cookie de sesión usando JavaScript (para obtener más información ver pregunta ). Me pregunto ¿cuál debería ser la fecha de caducidad? Supongo que es la sesión de navegación, por lo que si no configuro una fecha de vencimiento, se utilizará como predeterminado, ¿verdad? Esta sesión se usaría para validar un usuario conectado. Entonces, ¿depende de cuánto tiempo quiero que los usuarios permanezcan conectados antes de desconectarlos automáticamente (en caso afirmativo, cuál es un buen momento, o debería ser la sesión de navegación?)?

    
pregunta Celeritas 03.04.2013 - 19:10
fuente

3 respuestas

8
  

Supongo que es la sesión de navegación, por lo que si no configuro una fecha de caducidad, esta se utilizará como predeterminada, ¿no?

Sí. A menos que tenga una necesidad particular de que las sesiones sobrevivan al reinicio del navegador, omita el parámetro expires para que la cookie sea solo de sesión del navegador y no permanezca en el disco.

  

depende de cuánto tiempo quiero que los usuarios permanezcan conectados antes de cerrar la sesión automáticamente

Eso se rige por el tiempo de caducidad de la sesión real, que debe implementarse solo en el lado del servidor. Si utiliza un tiempo de expires , generalmente querrá que sea al menos tan largo como el tiempo de espera del lado del servidor, pero no debe confiar en que el navegador respete ese expires como su método para garantizar que las sesiones antiguas sean inalcanzables. .

En general, las cookies de sesión única (sin expires ) se usan para el seguimiento de sesión, con el tiempo de espera en el lado del servidor. Si se realiza una solicitud con una cookie no reconocida o faltante, entonces es probable que la sesión haya caducado en el lado del servidor, el navegador se haya cerrado en el lado del cliente, o ambos, y debe indicar al usuario que inicie una nueva sesión.

Normalmente, se incluirá una herramienta de administración de sesión en el marco web que se encuentre en el lado del servidor que lo resolverá enviando los encabezados Set-Cookie apropiados en una respuesta HTTP (ya sea la página HTML inicial o una respuesta XMLHttpRequest). Si bien podría reimplementar la administración de la sesión utilizando solo JavaScript, los parámetros aprobados y, por ejemplo, localStorage como alternativa a las cookies, no parece haber mucho que ganar reinventando esa rueda.

    
respondido por el bobince 04.04.2013 - 20:08
fuente
7

Mi recomendación sería: "No cree la cookie de autenticación con JavaScript". Una cookie que identifique una sesión autenticada debe marcarse con la marca HttpOnly para ayudar a mitigar los ataques XSS, por lo que debe ser creada por el servidor y enviada con la respuesta, no creada en el cliente.

Aparte de estos consejos, tu suposición es correcta en su mayor parte. Si no hay un conjunto de expiración en la cookie, entonces es una cookie de sesión y se mantendrá activa mientras el navegador esté abierto, y el sessionid es válido. Si el servidor caduca periódicamente las sesiones autenticadas, la cookie ya no se adjuntará a una sesión en el servidor y, por lo tanto, será esencialmente nula.

A su segunda pregunta, si desea especificar una cantidad máxima de tiempo de inicio de sesión de un usuario antes de tener que volver a autenticarse, por lo general se realiza con un vencimiento continuo, en el que se actualiza el tiempo de caducidad con cada solicitud para ser x minutos a partir de ahora, por lo que las sesiones de usuario activas no caducan a la fuerza, solo las sesiones inactivas en las que el usuario no ha realizado una nueva solicitud en los últimos x minutos. La forma más segura de hacer esto es vincular el valor de la cookie a una sesión en el servidor que expira a tiempo, que el usuario no puede interferir. La caducidad de la cookie no es suficiente, ya que puede ser modificada por el cliente. Si necesita almacenar un lado del cliente con vencimiento de sesión, debe estar cifrado en el valor de la cookie, por lo que nuevamente debe crearse del lado del servidor, no por JavaScript, ya que el servidor debe ser el único lugar donde se puede descifrar el valor para que sea seguro

Y, por último, a su tercera pregunta, ¿cuál es el tiempo adecuado antes de que caduque una sesión? Depende totalmente de su aplicación. Las aplicaciones financieras a menudo tienen tiempos de espera muy cortos de cinco o diez minutos. Muchas aplicaciones tienen un tiempo predeterminado más tradicional de 20 o 30 minutos. Si el flujo de trabajo de su aplicación requiere una gran cantidad de tiempo en una página sin actualizar, es posible que se requiera aún más tiempo. No sé que sea terriblemente importante en cualquier caso, a menos que su aplicación tenga necesidades de seguridad específicas.

    
respondido por el Xander 03.04.2013 - 19:32
fuente
2

No soy un desarrollador web, por lo que podría estar mal, pero esperaría que solo pudieras usar el encabezado Set-Cookie: en la respuesta HTTP a la consulta AJAX para configurar la cookie de sesión.

No debería necesitar pasar el ID de sesión dentro de la respuesta AJAX y luego usar Javascript para configurar esa cookie. Las funciones estándar de PHP session_*() deben manejar la configuración del tiempo de caducidad correctamente para usted.

En una nota de seguridad, HTTPOnly , Secure y SSL. Deberías estar haciendo todo esto.

También debe estar expirando las sesiones en el servidor cuando el usuario cierra la sesión y después de un cierto período de inactividad por parte del usuario. El período que elija es una compensación entre seguridad y usabilidad. El valor predeterminado en PHP es de 1440 minutos (24 horas).

    
respondido por el Ladadadada 03.04.2013 - 19:33
fuente

Lea otras preguntas en las etiquetas