2009-01-14 14 views
10

में सिंक कुकीज़ और सत्र सिंक करें मैं एएसपीनेट में एक साइट बना रहा हूं और इसमें कई सबडोमेन हैं। उदाहरण के लिए, one.cookies.com दो.cookies.comअलग-अलग सबडोमेन (एएसपीनेट)

मैं चाहता हूं कि मेरे उपयोगकर्ता या तो सबडोमेन में लॉगिन करने और दोनों वेबसाइटों के लिए लॉग इन करने में सक्षम हों। इसके अलावा, मुझे सिंक में होने के लिए सत्र और कुकीज़ चाहिए। अब तक मुझे ऐसा करने का एक विश्वसनीय तरीका नहीं मिला है।

+0

इस जवाब की जाँच करें: http://stackoverflow.com/a/3774627/8360, यह आप मूल रूप से सिर्फ 'जोड़ने <और अधिक संक्षिप्त है httpCookies डोमेन = "yourdomain.com" /> 'अपने web.configs पर। –

उत्तर

8

जब आप कुकी आप डोमेन सेट कर सकते हैं बनाने के लिए:

HttpCookie cookie = new HttpCookie("name", "value"); 
cookie.Domain = "cookies.com"; 

यह आपके कुकी cookies.com के सभी उप डोमेन से सुलभ हो करने की अनुमति देगा।

आप FormsAuthentication का उपयोग कर रहे हैं तो आप web.config में प्रमाणन कुकी के लिए डोमेन सेट कर सकते हैं:

<forms name=".ASPXAUTH" 
     loginUrl="login.aspx" 
     defaultUrl="default.aspx" 
     protection="All" 
     timeout="30" 
     path="/" 
     requireSSL="false" 
     domain="cookies.com"> 
</forms> 

कि एकल के लिए साइन-ऑन से अधिक उप डोमेन पर काम करने के लिए याद रखें अपने ASP.NET अनुप्रयोगों चाहिए इस कोडप्रोजेक्ट article में समझाए गए अनुसार machine keys साझा करें।

विभिन्न सबडोमेन (विभिन्न कार्यकर्ता प्रक्रियाओं) के बीच साझा सत्र अधिक कठिन है क्योंकि सत्र किसी एप्लिकेशन के लिए बाध्य हैं और आपको कस्टम सत्र सिंक्रनाइज़ेशन तंत्र को लागू करना होगा।

+8

डोमेन ".cookies.com" होना चाहिए और "कुकीज़.com" नहीं होना चाहिए – ErJab

0

मैं http://cookies.com के लिए कुकी बना रहा हूं। (कोई उप डोमेन या www सूचीबद्ध)

1

हाँ, आप और ".cookies.com" नहीं "cookies.com"

+0

क्या आप निश्चित हैं? इसे देखें [http://msdn.microsoft.com/en-us/library/ms178194.aspx], यह Response.Cookies ["डोमेन"] दिखाता है। डोमेन = "contoso.com"; फिर कहता है "कुकी तब प्राथमिक डोमेन के साथ ही sales.contoso.com और support.contoso.com डोमेन पर उपलब्ध होगी।" –

9

उपयोग करने के लिए आप ASP.NET सत्र सिंक करने के लिए चाहते हैं की जरूरत है आप रूपों प्रमाणीकरण आपकी साइट का उपयोग नहीं कर रहे हैं (उदाहरण के लिए, कोई लॉगिन नहीं है), निम्नलिखित कोड को अपने Globals.asax फ़ाइल में जोड़ने का प्रयास करें। यह मेरे लिए एक चैंप की तरह काम करता था और मुझे कुछ गंभीर दुःख बचाता था।

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 = ".know24.net"; // the full stop prefix denotes all sub domains 
     Response.Cookies["ASP.NET_SessionId"].Path = "/"; //default session cookie path root   
    } 
    } 
    #endregion  
} 

मैंने पाया यह मूल रूप से यहां पोस्ट: http://www.know24.net/blog/ASPNET+Session+State+Cookies+And+Subdomains.aspx

संबंधित मुद्दे