2010-09-13 5 views
4

Ce n'est pas facile à expliquer, mais je ferai de mon mieux. Le problème a commencé à se produire dans un site qui a été construit il y a quelques années en utilisant ASP classique, le symptôme est que les administrateurs se connectent en utilisant un formulaire puis une variable de session, mais quand ils demandent une nouvelle page ils sont à nouveau invités à se connecter.La session est perdue sur une nouvelle requête dans le site ASP classique

Ce problème n'est pas spécifique à un navigateur, j'ai reproduit le problème avec Firefox et IE8.

En utilisant Fiddler, je peux voir que le serveur envoie soudainement un nouvel entête Set-Cookie, malgré l'envoi d'un cookie de session précédent dans la requête. À partir de ce moment, le serveur basculera entre les deux sessions de manière aléatoire, aucune des sessions ne semblera expirée, elles conserveront leurs propres variables, mais pour l'utilisateur, cela ne sert à rien, car il peut être invité à se connecter. traité dans la session déjà connectée.

Que puis-je essayer pour trouver le problème? Le serveur est un hébergement mutualisé avec IIS6, la société d'hébergement n'est pas trop sympathique mais le coût de tout déplacer vers un autre endroit fait que les choses restent telles quelles.

Merci.

Quelques infos supplémentaires: Afficher le nom de la machine comme suggéré par Aaron D. montre toujours le même nom, mais je l'avais enregistré l'heure de début de l'application dans global.asa:

Sub Application_OnStart() 
    Application("Start") = now() 
End Sub 

Et il se Lorsque vous affichez cette information dans une page de test, elle change au fur et à mesure que la session détectée change. Il y a donc deux serveurs (avec le même nom) ou en quelque sorte deux fois l'application. Est-ce possible?

+0

Avez-vous de la chance avec Fiddler? –

+0

Non, Fiddler montre ce que j'ai expliqué. Je peux recharger la page de test plusieurs fois et soudainement le serveur envoie un nouvel en-tête set-cookie. – AlfonsoML

Répondre

2

J'ai quelques idées mais rien de définitif.

  1. Certaines demandes sont-elles traitées par HTTPS et d'autres par HTTP? Les cookies sont-ils configurés pour transférer uniquement sur des connexions sécurisées?

  2. Vos requêtes sont-elles alternées entre un sous-domaine et le domaine principal? Exemple, certaines demandes vont à www.foo.com et d'autres à foo.com? Les cookies ne peuvent pas être partagés entre les deux sauf si vous définissez le domaine dans le cookie. Cela peut également arriver avec plusieurs sous-domaines.

  3. Celui-ci est moins commun, mais la société héberge-t-elle votre site sur plusieurs serveurs qui distribuent la charge? Vous pouvez le dire en créant une page comme spécifiée ici: http://mentaljetsam.wordpress.com/2008/01/29/classic-asp-code-to-print-current-server-name/
    Si cela s'avère être le cas, la solution consiste à changer votre modèle d'état de session de "InProc" pour utiliser une ressource partagée telle qu'une base de données. Etes-vous sûr qu'il vous permute entre les sessions et ne vient pas expirer votre session? Il se peut que votre application soit en train de redémarrer (en fonction de votre modification) et que cela tue vos sessions, mais le résultat en cache donne l'impression qu'elle est toujours valide. Pouvez-vous essayer de faire des rafraichissements et/ou vérifier les résultats avec un observateur de trafic HTTP comme Fiddler? Cela pourrait vous donner une meilleure idée de ce que les demandes traversent réellement le fil.

+0

1. Non, tout le site utilise http. 2. Non, j'ai vérifié et toutes les demandes utilisent www. En outre, j'ai parfois réussi à reproduire le problème en rechargeant une seule page de test. 3. C'est quelque chose d'intéressant à vérifier (et une de mes suppositions initiales). J'ai ajouté cette information à ma page de test, mais maintenant cela fonctionne correctement. Mais peut-être qu'ils pourraient nommer deux machines de la même manière? – AlfonsoML

Questions connexes