2010-02-09 3 views
0

Je cours un site Web ASP.NET sur ma boîte de développement (.NET 2.0 sur Vista/IIS7). La méthode Session_Start dans global.asax.cs consigne chaque appel dans un fichier (log4net). La méthode Session_End enregistre également tous les appels. J'utilise l'état de session InProc et définissez le délai d'expiration de la session à 5 minutes (pour éviter d'attendre 20 minutes). J'ai frappé le site Web, attendez 5 minutes unité Je vois la journalisation Session_End. Ensuite, je F5 le site Web. Les navigateurs ont toujours le cookie de session et l'envoient au serveur. Session_Start est appelée et une nouvelle session est créée en utilisant le même identifiant de session (btw: j'ai besoin que ce soit le même identifiant de session, car il est utilisé pour stocker des données dans la base de données). Résultat: Chaque fois que j'appuie sur F5 lors d'une session terminée précédemment, la méthode Session_Start est appelée.ASP.NET: Grand nombre de Session_Start avec l'ID de la même session

Lorsque j'ouvre un navigateur différent, la méthode Session_Start est appelée une seule fois. Puis, après 5 minutes, Session_End chaque F5 provoque l'exécution de la méthode Session_Start.

Quelqu'un peut-il expliquer pourquoi cela se produit?

Mise à jour: Après le délai d'attente de session, toutes les demandes suivantes ont une fin de session de début de session &. Donc, à la fin, ma question est la suivante: pourquoi les sessions sur ces demandes subséquentes sont-elles immédiatement fermées?

2010-02-09 14:49:08,754 INFO Global.asax[7486] [(null)] - Session started. SID=nzponumvf1hbaniverffp4mq host=127.0.0.1 
2010-02-09 14:49:08,754 INFO Global.asax[7486] [nzponumvf1hbaniverffp4mq] - Request start: GET http://localhost:80/js/settings.js 
2010-02-09 14:49:08,756 INFO Global.asax[7486] [(null)] - Session ended. SID=nzponumvf1hbaniverffp4mq 
2010-02-09 14:49:08,760 INFO Global.asax[7486] [(null)] - Session started. SID=nzponumvf1hbaniverffp4mq host=127.0.0.1 
2010-02-09 14:49:08,760 INFO Global.asax[7486] [nzponumvf1hbaniverffp4mq] - Request start: GET /css/package.aspx?name=core 
2010-02-09 14:49:08,761 INFO Global.asax[7486] [(null)] - Session ended. SID=nzponumvf1hbaniverffp4mq 
2010-02-09 14:49:08,762 INFO Global.asax[7486] [(null)] - Session started. SID=nzponumvf1hbaniverffp4mq host=127.0.0.1 
2010-02-09 14:49:08,762 INFO Global.asax[7486] [nzponumvf1hbaniverffp4mq] - Request start: GET /js/package.aspx?name=all 
2010-02-09 14:49:08,763 INFO Global.asax[7486] [(null)] - Session ended. SID=nzponumvf1hbaniverffp4mq 
2010-02-09 14:49:08,763 INFO Global.asax[7486] [(null)] - Session started. SID=nzponumvf1hbaniverffp4mq host=127.0.0.1 
2010-02-09 14:49:08,763 INFO Global.asax[7486] [nzponumvf1hbaniverffp4mq] - Request start: GET /css/package.aspx?name=rest 
2010-02-09 14:49:08,764 INFO Global.asax[7486] [(null)] - Session ended. SID=nzponumvf1hbaniverffp4mq 
2010-02-09 14:49:08,764 INFO Global.asax[7486] [(null)] - Session started. SID=nzponumvf1hbaniverffp4mq host=127.0.0.1 
2010-02-09 14:49:08,765 INFO Global.asax[7486] [nzponumvf1hbaniverffp4mq] - Request start: GET /css/package.aspx?name=vacation 
2010-02-09 14:49:08,765 INFO Global.asax[7486] [(null)] - Session ended. SID=nzponumvf1hbaniverffp4mq 

web.config section pertinente:

<system.web> 
    <compilation debug="true" /> 
    <sessionState timeout="2" regenerateExpiredSessionId="false" /> 
</system.web> 
+0

N'est-ce pas exactement ce que vous venez de décrire et qu'est-ce qu'on s'attendrait à ce qu'il se passe? – Lazarus

+0

Non, je m'attendrais juste 1 Session_Start après Session_End, pas 10 Session_Start quand j'appuie sur F5 10 fois (ou cliquez sur 10 liens séquentiellement) – Jaap

+0

La méthode Session_End est appelée immédiatement après que la demande a été servie. – Jaap

Répondre

1

pouvez-vous s'il vous plaît vous poster web.config?

vérifier la regenerateExpiredSessionId valeur system.web/sessionState

+0

Je n'ai pas regenerateExpiredSessionId dans le fichier web.config. Je ne veux pas régénérer ID de session expiré, c'est une exigence car nous avons besoin de l'identifiant de session pour mettre à jour les enregistrements dans la base de données – Jaap

+0

peut-être que cela aiderait si vous le définissez manuellement à "false" – nWorx

+0

travail, obtenant toujours le Session_Start/Session_End pour 1 demande – Jaap

0

Vous apportez des modifications au dossier bin de votre application web? Comme si vous vous connectiez dans le dossier bin, le démarrage de la session pouvait se déclencher plus d'une fois.

0

Je pense que vous ne comprenez pas la signification de regenerateExpiredSessionId. Vous l'avez actuellement mis à false, ce qui signifie qu'il REUTILISERa les ID de session expirés, plutôt que de générer un nouveau chaque fois que cet utilisateur obtient une nouvelle session. L'ID de session ASP.NET est conservé dans le cookie des utilisateurs, et lorsque regenerateExpiredSessionId est défini sur false, les mêmes ID de session des utilisateurs seront réutilisés pour chaque NOUVELLE session, à condition que le cookie soit valide.

Essayez de définir regenerateExpiredSessionId sur true.

Questions connexes