2010-06-03 10 views
0

Ok, voici mon problème, je veux maintenir les données de session entre deux applications ou domaines (par exemple: - www.abc.com et secure.abc.com). J'ai lu sur le net à ce sujet, mais beaucoup de gens pointant de nombreuses façons de le faire, avec des gens commentant + ve et -ve réponses à tous. De plus, beaucoup ne fournissent qu'une réponse théorique, font ceci et cela, mais pas de code du tout.partage des données de session entre les domaines dans asp.net, confus!

sont ces étapes tout ce qui est nécessaire? 1) web.config: <httpCookies domain=".abc.com"/>

2) les données de session magasin dans sql DB comme: (après la préparation du db pour stocker des sessions)

<sessionState mode="SQLServer" sqlConnectionString="Data Source=YourServer; 
Integrated Security=True;database=MySessionDB" sqlCommandTimeout="30" 
allowCustomSqlDatabase="true"/> 
<machineKey decryption="AES" validation="SHA1" decryptionKey="..." validationKey="..." /> 

3) Am confus au sujet de celui-ci: je veux définir le domaine pour le cookie de session comme ceci Response.Cookies ["ASP.NET_SessionId"]. Domain = ".abc.com"; Mais où ce code doit-il être écrit? cette entrée: http://mgrzyb.blogspot.com/2007/12/aspnet-and-subdomains.html dit: utilisez System.Web.SessionState.SessionIDManager comme classe de base mais la méthode SaveSessionID n'est pas virtuelle et ne peut donc pas être surchargée. Les options sont: ré-implémenter explicitement la méthode d'interface ou décorer la classe SessionIDManager et après avoir appelé SessionIDManager.SaveSessionID définir Response.Cookies [SessionIdCookieName] .Domain à notre domaine.

Seulement si l'auteur avait fourni du code réel, l'étape 3 aurait été claire.

Quelqu'un peut-il fournir le code correspondant?

De plus, ces 3 étapes suffisent pour partager la session entre les domaines?

Répondre

1

la déclaration 3ème étape peut être écrit en global.asax selon: http://www.know24.net/blog/ASPNET+Session+State+Cookies+And+Subdomains.aspx

protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e) 

{ 

    /// only apply session cookie persistence to requests requiring session information 



    #region session cookie 

    if (Context.Handler is IRequiresSessionState || Context.Handler is IReadOnlySessionState) 

    { 

    /// Ensure ASP.NET Session Cookies are accessible throughout the subdomains. 



    if (Request.Cookies["ASP.NET_SessionId"] != null && Session != null && Session.SessionID != null) 

    { 

     Response.Cookies["ASP.NET_SessionId"].Value = Session.SessionID; 

     Response.Cookies["ASP.NET_SessionId"].Domain = ".abc.com"; // the full stop prefix denotes all sub domains 

     Response.Cookies["ASP.NET_SessionId"].Path = "/"; //default session cookie path root   

    } 

    } 

    #endregion  

} 
Questions connexes