Méthode pour maintenir la session : certaines personnes disent de définir session.timeout=-1, ou un nombre inférieur à 0. Cette méthode n'est définitivement pas possible. Le temps de calcul de la session est en minutes et doit être un entier supérieur ou égal à 1. Quelqu'un d'autre a dit de définir session.timeout=99999. Cela ne fonctionne pas non plus, la session a une durée maximale. Après avoir testé, j'ai découvert que la valeur maximale est de 24 heures, ce qui signifie que le maximum que vous pouvez avoir est session.timeout=1440, et 1441 n'est pas autorisé, haha. Mon environnement de test : win2003+IIS6.0+ASP3.0.
Par conséquent, il est impossible de faire en sorte que la session n'expire jamais en définissant le délai d'expiration de session.timeout. Écrire dans les cookies est une meilleure méthode. Il existe de nombreux tutoriels de ce type sur Internet, je ne les aborderai donc pas ici ! Une autre méthode consiste à configurer une iframe cachée dans la page où la session doit être maintenue. De temps en temps (cette durée est inférieure au temps session.timeout), actualisez la page vide dans le cadre ! La méthode de mise en œuvre est la suivante :
Ajoutez ce qui suit à la page de session où vous souhaitez le conserver :
Copiez le code comme suit :
<iframe width=0 height=0 src=/blog/SessionKeeper.asp></iframe>
Créez le fichier SessionKeeper.asp dans le même répertoire. XML/HTMLCopier le code
Copiez le code comme suit :
<html>
<tête>
<méta http-equiv=Refresh content=900000;url=sessionKeeper.asp>
<!--Actualisez-vous toutes les 900 secondes afin de communiquer avec le serveur et éviter la perte de session-->
</tête>
</html>
Cette méthode est relativement courante et il existe une autre méthode similaire à celle ci-dessus, mais elle n'utilise pas de méta pour actualiser automatiquement les iframes imbriquées. Il utilise javascript:window.setTimeout(functionname(),10000); pour appeler automatiquement une fonction à intervalles réguliers. Bien entendu, la fonction doit toujours se connecter à un fichier vide. La méthode spécifique est la suivante :
Ajouter : copier le code JavaScript dans la session à maintenir
Copiez le code comme suit :
<script id=Retour langue=javascript></script>
<langage de script=javascript>
fonction keepsession(){
document.all[Retour].src=/blog/SessionKeeper.asp?RandStr=+Math.random();
//Le RandStr=Math.random ici sert simplement à rendre la valeur de back.src différente à chaque fois pour éviter que l'actualisation de la même adresse ne soit invalide.
window.setTimeout(keepsession(),900000); // S'appelle toutes les 900 secondes
}
keepsession();
</script>De cette façon, créez simplement un fichier sessionKeeper.asp avec un contenu vide dans le même répertoire !
Le problème n'est pas résolu : il ne devrait y avoir aucun problème pour maintenir la session via la méthode ci-dessus. La valeur par défaut d'IIS pour effacer la session sans demande est de 20 minutes. Le temps que j'ai défini pour chaque service interactif est bien inférieur à cette valeur. mais cela me prend environ une journée. Après beaucoup de temps, la séance disparaît toujours sans raison ! déprimé.
Plus tard, j'ai cherché à de nombreux endroits sur Internet et j'ai finalement trouvé la réponse : il s'avère que pour protéger le serveur, IIS a un concept de recyclage ! Après de longs tests, j'ai finalement acquis une compréhension générale (ne vous moquez pas de moi ^-^). Voyons d’abord où se met en place ce recyclage.
Démarrez le Gestionnaire IIS->Pool d'applications->Clic droit->Propriétés->onglet Recycler. Il existe un élément qui fonctionne par défaut, qui est le premier élément : Processus de travail de recyclage (minutes). La valeur par défaut est 1 740 minutes, environ. 29 heures. Que veut-il dire ? Ma compréhension personnelle : toutes les sessions en cours seront automatiquement effacées 1 740 minutes après session.timeout. Cette valeur peut être fixée à un maximum de 4 000 000, soit environ plus de 2 700 jours ! Je l'ai annulé directement sans qu'il le recycle automatiquement ! Le problème est enfin résolu.
De plus, cette boîte de dialogue de propriétés contient plusieurs autres éléments :
Le deuxième élément doit être recyclé lorsque le nombre d'utilisateurs connectés dépasse un certain nombre.
Le troisième élément consiste à le recycler automatiquement à un certain moment.
Dans l'onglet Performances, arrêtez le processus de travail après avoir été inactif pendant cette période. C'est ici que le délai d'expiration de session par défaut d'IIS est défini. La valeur par défaut est de 20 minutes. La valeur maximale ici peut également être définie sur 4 000 000, ce qui est différent de la définition de la valeur maximale de session.timeout sur 1 440 dans la page ASP. Je n'ai pas testé si la définition d'une valeur supérieure à 1440 fonctionnerait ici, je pense que cela devrait être possible. Alors pourquoi la valeur maximale de session.timeout dans la page ASP ne peut-elle être que de 1 440, alors qu'elle peut être définie de manière aussi grande dans les propriétés d'IIS ? Il devrait s'agir d'un mécanisme de protection : n'importe quel utilisateur peut définir la valeur de session.timeout sur la page ASP, mais seul l'administrateur peut la définir dans IIS. Les deux ont des autorisations différentes, donc la plage de paramètres est différente.