es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Actualización condicional del tiempo de expiración de las cookies en nginx para encontrar el tiempo de inactividad.

Estoy tratando de implementar una solución para identificar si hubo un tiempo de inactividad de X minutos entre dos solicitudes.

Para esto, planeo utilizar el siguiente enfoque:
1. Inicialmente, establecer una cookie desde el lado de la aplicación. El tiempo de expiración de esta cookie se establece en X minutos.
2. Cada vez que haya una solicitud, en nginx, verificaré si el tiempo de expiración de la cookie ha pasado o si la cookie está disponible.
3. Si la cookie está disponible y no ha expirado, actualizaré el tiempo de expiración nuevamente con X minutos. De lo contrario, eliminaré la cookie.
4. En el lado del servidor, puedo verificar la disponibilidad de la cookie y, si está disponible, puedo concluir que la solicitud anterior estuvo dentro de los X minutos.

Para implementar esta solución, necesitaré algunos fragmentos de código como los siguientes.

si la-cookie-existe y cookie.tiempoexpiracion > horaactual
Set-Cookie: MI_COOKIE=SOMEVAL; Max-Age=X*60; Seguro; HttpOnly
sino
Eliminar-Cookie MI_COOKIE
fin

¿Cómo puedo implementar esta condición y modificación de la cookie en nginx? ¿Es posible hacerlo sin lua?

No quiero implementar esta lógica en el lado de la aplicación porque hay múltiples aplicaciones servidas a través de nginx y quiero mantener la lógica común para todas. Si el usuario está accediendo a cualquiera de las aplicaciones, la cookie debería ser actualizada.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en nginx y cookies, puedo sugerir el siguiente enfoque para implementar la solución de identificar si ha habido un tiempo de inactividad de X minutos entre dos solicitudes.

    El primer paso es establecer una cookie desde el lado de la aplicación con un tiempo de expiración de X minutos. Esto se puede hacer utilizando el encabezado Set-Cookie en la respuesta del servidor de aplicaciones. Por ejemplo,

    Set-Cookie: MY_COOKIE=SOMEVAL; Max-Age=X*60; Secure; HttpOnly
    

    Cuando se establece esta cookie, el atributo Max-Age establece el tiempo de expiración en segundos. En este caso, se establece en X*60 segundos.

    A continuación, debemos verificar si la cookie existe y si su tiempo de expiración no ha pasado en nginx. Esto se puede hacer utilizando el siguiente fragmento de código:

    if ($http_cookie ~* "MY_COOKIE=([^;]+).*") {
      set $my_cookie_val $1;
      set $idle_time_passed 0;
      if ($cookie_MY_COOKIE_expiry < $time_iso8601) {
        set $idle_time_passed 1;
      }
    }
    

    En este fragmento de código, estamos utilizando la directiva if para verificar si la cookie MY_COOKIE existe y extraer su valor en una variable llamada $my_cookie_val. También estamos estableciendo una variable llamada $idle_time_passed en 0. Si el tiempo de expiración de la cookie (almacenado en la variable $cookie_MY_COOKIE_expiry) ha pasado (verificado con el tiempo actual en formato ISO8601), entonces establecemos $idle_time_passed en 1.

    Según el valor de $idle_time_passed, podemos tomar la acción necesaria. Si el valor es 0, significa que la cookie es válida y el usuario no ha estado inactivo durante X minutos. En este caso, podemos actualizar el tiempo de expiración de la cookie utilizando el siguiente fragmento de código:

    add_header Set-Cookie "MY_COOKIE=$my_cookie_val; Max-Age=X*60; Secure; HttpOnly";
    

    Si el valor de $idle_time_passed es 1, significa que el usuario ha estado inactivo durante X minutos o más. En este caso, debemos eliminar la cookie utilizando el siguiente fragmento de código:

    add_header Set-Cookie "MY_COOKIE=; Expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; Secure; HttpOnly";
    

    En este fragmento de código, estamos estableciendo el encabezado Expires en un momento pasado, lo que hace que el navegador elimine la cookie.

    Es posible implementar esta verificación de condición y modificación de cookie en nginx sin usar lua. Los fragmentos de código proporcionados anteriormente utilizan directivas de nginx para lograr la funcionalidad deseada.

Comments are closed.