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.
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 encabezadoSet-Cookie
en la respuesta del servidor de aplicaciones. Por ejemplo,Cuando se establece esta cookie, el atributo
Max-Age
establece el tiempo de expiración en segundos. En este caso, se establece enX*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:En este fragmento de código, estamos utilizando la directiva
if
para verificar si la cookieMY_COOKIE
existe y extraer su valor en una variable llamada$my_cookie_val
. También estamos estableciendo una variable llamada$idle_time_passed
en0
. 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 formatoISO8601
), entonces establecemos$idle_time_passed
en1
.Según el valor de
$idle_time_passed
, podemos tomar la acción necesaria. Si el valor es0
, significa que la cookie es válida y el usuario no ha estado inactivo duranteX
minutos. En este caso, podemos actualizar el tiempo de expiración de la cookie utilizando el siguiente fragmento de código:Si el valor de
$idle_time_passed
es1
, significa que el usuario ha estado inactivo duranteX
minutos o más. En este caso, debemos eliminar la cookie utilizando el siguiente fragmento de código: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 usarlua
. Los fragmentos de código proporcionados anteriormente utilizan directivas denginx
para lograr la funcionalidad deseada.