Método para mantener la sesión: algunas personas dicen que se debe establecer session.timeout=-1, o un número menor que 0. Este método definitivamente no es posible. El tiempo de cálculo de la sesión está en minutos y debe ser un número entero mayor o igual a 1. Alguien más dijo que se estableciera session.timeout=99999. Esto tampoco funciona, la sesión tiene un límite de tiempo máximo. Después de probar, encontré que el valor máximo es 24 horas, lo que significa que el máximo que puedes tener es session.timeout=1440, y 1441 no está permitido, jaja. Mi entorno de prueba: win2003+IIS6.0+ASP3.0.
Por lo tanto, es imposible hacer que la sesión nunca expire estableciendo el tiempo de vencimiento de session.timeout. Escribir en Cookies es un método mejor. Hay muchos tutoriales de este tipo en Internet, ¡así que no los analizaré aquí! Otro método es configurar un iframe oculto en la página donde se mantendrá la sesión. De vez en cuando (este tiempo es menor que el tiempo de espera de la sesión), actualice la página vacía en el marco. El método de implementación es el siguiente:
Agregue lo siguiente a la página de la sesión donde desea conservarlo:
Copie el código de código de la siguiente manera:
<iframe ancho=0 alto=0 src=/blog/SessionKeeper.asp></iframe>
Cree el archivo SessionKeeper.asp en el mismo directorio. XML/HTMLCopiar código
Copie el código de código de la siguiente manera:
<html>
<cabeza>
<meta http-equiv=Actualizar contenido=900000;url=sessionKeeper.asp>
<!--Actualízate cada 900 segundos para poder comunicarte con el servidor y evitar que se pierda la sesión-->
</cabeza>
</html>
Este método es relativamente común y existe otro método similar al anterior, pero no utiliza meta para actualizar automáticamente los iframes anidados. Utiliza javascript:window.setTimeout(functionname(),10000); para llamar automáticamente a una función a intervalos. Por supuesto, la función aún necesita conectarse a un archivo vacío. El método específico es el siguiente:
Agregar: copiar código JavaScript a la sesión que se mantendrá
Copie el código de código de la siguiente manera:
<script id=Volver idioma=javascript></script>
<lenguaje de escritura=javascript>
función mantiene sesión(){
document.all[Volver].src=/blog/SessionKeeper.asp?RandStr=+Math.random();
// RandStr=Math.random aquí es solo para hacer que el valor de back.src sea diferente cada vez para evitar que la actualización de la misma dirección no sea válida.
window.setTimeout(keepsession(),900000); //Se llama a sí mismo cada 900 segundos.
}
mantener sesión();
</script>De esta manera, simplemente cree un archivo sessionKeeper.asp con contenido vacío en el mismo directorio.
El problema no está resuelto: no debería haber ningún problema para mantener la sesión mediante el método anterior. El valor predeterminado de IIS para borrar la sesión sin solicitud es 20 minutos. El tiempo que configuré para cada servicio interactivo es mucho menor que este valor. pero a mí me lleva aproximadamente un día. Después de mucho tiempo, ¡la sesión todavía desaparece sin ningún motivo! deprimido.
Más tarde, busqué en muchos lugares en Internet y finalmente encontré la respuesta: ¡Resulta que para proteger el servidor, IIS tiene un concepto de reciclaje! Después de probar durante mucho tiempo, finalmente obtuve una comprensión general (no se rían de mí ^-^). Primero echemos un vistazo a dónde se establece este reciclaje.
Inicie el Administrador de IIS->Grupo de aplicaciones->Clic derecho->Propiedades->pestaña Reciclar. Hay un elemento que funciona de forma predeterminada, que es el primer elemento: Proceso de trabajo de reciclaje (minutos). 29 horas. ¿Qué quiere decir? Mi comprensión personal: todas las sesiones en curso se borrarán automáticamente 1740 minutos después del tiempo de espera de la sesión. Este valor se puede establecer en un máximo de 4.000.000, ¡lo que equivale aproximadamente a más de 2.700 días! ¡Lo cancelé directamente sin que él lo reciclara automáticamente! El problema finalmente está resuelto.
Además, hay varios otros elementos en este cuadro de diálogo de propiedades:
El segundo elemento debe reciclarse cuando el número de usuarios conectados supere un determinado número.
El tercer elemento es reciclarlo automáticamente en un momento determinado.
En la pestaña Rendimiento, cierre el proceso de trabajo después de estar inactivo durante este período de tiempo. Aquí es donde se establece el tiempo de espera predeterminado de la sesión de IIS. El valor predeterminado es 20 minutos. El valor máximo aquí también se puede establecer en 4000000, que es diferente de establecer el valor máximo de session.timeout en 1440 en la página ASP. No he probado si establecer un valor superior a 1440 aquí funcionará. Creo que debería ser posible. Entonces, ¿por qué el valor máximo de session.timeout en la página ASP puede ser solo 1440, pero puede establecerse en un valor tan grande en las propiedades de IIS? Debería ser un mecanismo de protección: cualquier usuario puede configurar el valor de session.timeout en la página ASP, pero solo el administrador puede configurarlo en IIS. Los dos tienen permisos diferentes, por lo que el rango de configuración es diferente.