2010-03-08 2 views
0

J'essaie d'utiliser des sous-domaines dans mon site Web ASP.NET, mais je rencontre quelques problèmes avec la réinitialisation de la session.Session en cours de réinitialisation lors de l'utilisation du sous-domaine

J'ai modifié mon fichier hosts pour avoir 'localhost', 'one.localhost' et 'two.localhost'. Je peux aller à l'une de ces URL et faire ce que je dois faire et me connecter à mon système. Le mode de session est définie comme suit dans le web.config:

<sessionState cookieless="false" mode="SQLServer" timeout="300" 
     sqlConnectionString="Data Source=MyDatabase;user id=User1;password=pass"/> 

J'utilise SQLServer que le site sera couru comme webfarm. Ce que je découvre, c'est que quand je clique sur quelque chose qui provoque une publication, toute la session est perdue et un nouvel identifiant de session est créé, quand cela se produit, mon site web est maintenant 'localhost' plutôt que 'one.localhost ' par exemple.

Est-ce que quelqu'un sait ce qui pourrait causer cela?

Vive

Répondre

3

Vous semblez avoir quelques problèmes en cours de votre question:

  1. session de partage informations dans plusieurs sous-domaines.
  2. Connectez-vous à plusieurs domaines.
  3. Rester sur le domaine correct pendant une publication.

Pour partager les informations de session à travers plusieurs sous-domaines, vous aurez besoin d'écrire le cookie de session au domaine correct, dans ce cas .example.com - voir plus d'informations ici: "ASP.NET Session State, Cookies and Sub-domains".

Si vous voulez que l'utilisateur de se connecter sur tous les domaines simultanément, et que vous utilisez l'authentification Forms, vous pouvez utiliser l'attribut domain de la forms element (notez la période de premier plan dans le chemin de domaine):

<forms 
    name="name" 
    loginUrl="URL" 
    defaultUrl="URL" 
    domain=".example.com"> 
</forms> 

Vous devrez configurer ceci sur tous les sites. Pour savoir pourquoi vous êtes redirigé vers localhost plutôt que vers one.localhost lors d'une publication, vous devez jeter un coup d'œil à la source qui a été rendue (y compris des informations de base href ou votre formulaire). renvoyer explicitement à localhost au lieu de one.localhost)? Un bon outil pour voir ce que le navigateur fait est Fiddler. Enfin, en guise de mise en garde lorsque vous déployez ceci sur plusieurs serveurs, n'oubliez pas de configure your MachineKey sur tous les sites pour vous assurer qu'ils ont la même valeur afin qu'ils puissent déchiffrer la session, les jetons de connexion, viewstate, etc. correctement.

1

Fondamentalement, le domaine étant définis dans le cookie est connecté spécifique à one.localhost.

Il y a quelques hacks possibles. voir par exemple la dernière réponse à this question:

Dans la connexion/page de démarrage, exécutez la commande suivante:

Response.Cookies["ASP.NET_SessionId"].Value = Session.SessionID; 
Response.Cookies["ASP.NET_SessionId"].Domain = ".mydomain.com"; 
+0

Voici un autre lien qui décrit la solution que @Damien_The_Unbeliever a publiée plus en détail. http: //www.know24.net/blog/ASPNET + session + état + cookies + et + sous-domaines.aspx – dugas

Questions connexes