ASP.NET: Session.SessionID changements entre les demandes
Pourquoi la propriété SessionID sur le Session-objet dans une page ASP.NET-changement de page entre les demandes?
J'ai une page comme ceci:
...
<div>
SessionID: <%= SessionID %>
</div>
...
Et la sortie ne cesse de changer à chaque fois que j'ai frappé F5, indépendant du navigateur.
Vous devez vous connecter pour publier un commentaire.
C'est la raison pour
http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.sessionid.aspx
Donc, en gros, à moins que vous accédez à votre objet de session sur le serveur principal, un nouvel id de session est généré avec chaque demande
MODIFIER
Ce code doit être ajouté dans le fichier Global.asax. Il ajoute une entrée à l'objet de Session afin de fixer la session jusqu'à ce qu'il expire.
someid
la session si resteront les mêmes. Prendre en compte le fait que cette réponse est de plus de 4 ans, vous ne savez pas si il n'y a aucune modification par rapport à cela.Il y a une autre, plus insidieuse, raison pour laquelle cela peut se produire même lorsque l'objet de la Session a été initialisé comme l'a démontré par Cladudio.
Dans le Web.config, si il y a un
<httpCookies>
entrée est fixé àrequireSSL="true"
mais vous ne sont pas réellement à l'aide de HTTPS: pour une demande spécifique, alors le cookie de session n'est pas envoyé (ou peut-être pas retourné, je ne suis pas sûr), ce qui signifie que vous vous retrouvez avec une nouvelle session pour chaque demande.J'ai trouvé celui-ci à la dure, de consacrer plusieurs heures de va-et-vient entre plusieurs commits dans mon contrôle à la source, jusqu'à ce que j'ai trouvé ce changement avait cassé ma demande.
Dans mon cas, j'ai compris que le cookie de session avait un domaine qui inclus
www.
préfixe, alors que je demande la page sanswww.
.L'ajout de
www.
à l'URL immédiatement résolu le problème. Plus tard, j'ai changé de domaine de validité du cookie à être mis à.mysite.com
au lieu dewww.mysite.com
.À l'aide de Neville réponse (suppression requireSSL = true, dans le web.config) et modifiant légèrement Joel Etherton du code, voici le code qui doit gérer un site qui fonctionne dans les deux mode SSL et non le mode SSL, en fonction de l'utilisateur et la page (je suis de sauter dans le code et ne l'ai pas testé sur SSL encore, mais attendez, il devrait de travail sera trop occupée à plus tard pour revenir à ce, si elle est ici:
Une autre possibilité qui provoque le SessionID pour changer entre les demandes, même lorsque Session_OnStart est défini et/ou une Session a été initialisé, c'est que le nom d'hôte de l'URL contient un caractère non valide (comme un trait de soulignement). Je crois que c'est de IE (non vérifié), mais si votre URL est, disons,
http://server_name/app
, IE va bloquer tous les cookies et de vos informations de session ne sera pas accessible entre les demandes.En fait, chaque demande de tourner une session distincte sur le serveur, donc si votre page contient plusieurs images, les balises de script, etc., ensuite, chacune de ces demandes GET résultat dans une autre session sur le serveur.
Plus d'informations: http://support.microsoft.com/kb/316112
Mon problème était avec un Microsoft MediaRoom IPTV application. Il s'avère que le MPF MRML applications ne prennent pas en charge les cookies; la modification de l'utilisation de cookieless sessions dans le web.config résolu mon problème
Voici un ancien article sur le sujet:
Cookieless ASP.NET
mon problème est que nous avons eu ce jeu dans le web.config
<httpCookies httpOnlyCookies="true" requireSSL="true" />
cela signifie que lorsque le débogage en non-SSL (par défaut), l'auth témoin a pas pu être envoyé vers le serveur. cela signifie que le serveur va envoyer un nouveau auth cookie (nouvelle session) pour chaque demande de retour du client.
la solution est soit de définir requiressl à false dans le web.config et vrai dans le web.la libération.config ou activer SSL lors du débogage:
Dans mon cas ce qui se passait beaucoup de choses dans mon développement et des environnements de test. Après avoir essayé toutes les solutions ci-dessus, sans succès, j'ai trouvé que j'ai été en mesure de résoudre ce problème par la suppression de tous les cookies de session. L'extension web developer très facile à faire. J'utilise principalement Firefox pour le développement et les tests, mais c'est aussi arrivé lors de tests en Chrome. La correction a également travaillé dans Chrome.
Je n'ai pas eu à le faire encore dans l'environnement de production et n'ont pas reçu tous les rapports de gens de ne pas être en mesure de se connecter. Cela aussi, ne semblait se produire après avoir fait les cookies de session pour être sûr. Il n'est jamais arrivé dans le passé, alors qu'ils n'étaient pas en sécurité.
dans mon cas, c'était parce que j'étais la modification de session après la redirection à partir d'une passerelle dans une application externe, donc, parce que j'ai été en utilisant IP plutôt que sur localhost dans cette page, url, il était en fait considéré comme différent site web avec différentes sessions.
En résumé
Assurez-vous que vous n'avez pas de délai d'expiration de session, qui est très court, et assurez-vous également que si vous êtes en utilisant des cookies de sessions que vous acceptez la session.
FireFox webDeveloperToolbar est utile dans des moments comme cela que vous pouvez voir les cookies mis en place dans votre application.
ID de Session réinitialisation peut avoir de nombreuses causes. Cependant, tous les mentionnés ci-dessus ne correspond pas à mon problème. Je vais donc décrire les pour référence future.
Dans mon cas, une nouvelle session est créée sur chaque demande a entraîné une boucle de redirection. La redirection de l'action prend place dans OnActionExecuting événement.
Aussi j'ai été effacement de tous les en-têtes http (également dans OnActionExecuting événement à l'aide de Réponse.ClearHeaders méthode) afin d'empêcher la mise en cache des sites sur le côté client. Mais cette méthode efface tous les en-têtes, y compris des informations sur la session de l'utilisateur, et, par conséquent, toutes les données de stockage temporaire (qui j'ai été en utilisant plus tard dans le programme). Donc même en mettant de la nouvelle session Session_Start événement n'a pas aidé.
Pour résoudre mon problème je me suis assuré de ne pas supprimer les en-têtes lors d'une redirection.
Espère que cela aide quelqu'un.
Je suis tombé sur cette question d'une manière différente. Les contrôleurs qui ont cet attribut
[SessionState(SessionStateBehavior.ReadOnly)]
ont été la lecture d'une autre session, même si j'avais mis une valeur dans la session d'origine lors de l'application de démarrage. J'étais en ajoutant la valeur de session via le _layout.cshtml (peut-être pas la meilleure idée?)Il était clairement à la lecture seule à l'origine du problème, car quand je l'ai supprimé l'attribut, la session d'origine (et SessionId) de rester dans le tact. À l'aide de Claudio/la solution de Microsoft, il fixe.
Je suis sur .NET de Base 2.1 et j'en suis bien conscient que la question n'est pas à propos de la Base. Cependant, l'internet est en manque et Google m'a amené ici, donc dans l'espoir de sauver quelqu'un quelques heures.
Startup.cs
client.js
Controllers/LoginController.cs
Avis que la session de l'écriture et de la lecture fonctionne, mais pas les cookies semblent être transmis au navigateur. Au moins, je ne pouvais pas trouver un "Set-Cookie" en-tête de n'importe où.