2012-03-16 17 views
6

मैंने एक नया एमवीसी 3 एप्लीकेशन बनाया और यह WinHost की मूल योजना पर होस्ट किया गया है।कुछ समय बाद उपयोगकर्ताओं को लॉग इन किया गया

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

http://support.winhost.com/KB/a626/how-to-enable-aspnet-sql-server-session-on-your-web.aspx

यहाँ उपरोक्त चरण पालन करने के बाद मेरी web.config की सामग्री है:

अपनी दस्तावेज़ीकरण के अनुसार, मैं यह देखने

<?xml version="1.0"?> 
<!-- 
    For more information on how to configure your ASP.NET application, please visit 
    http://go.microsoft.com/fwlink/?LinkId=152368 
    --> 
<configuration> 
    <connectionStrings>  
    <!-- REMOVED FOR PRIVACY --> 
    </connectionStrings> 
    <appSettings> 
    <add key="webpages:Version" value="1.0.0.0"/> 
    <add key="ClientValidationEnabled" value="true"/> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
    </appSettings> 
    <system.web>  
    <sessionState mode="SQLServer" 
        allowCustomSqlDatabase="true"     
        cookieless="false" 
        timeout="2880" 
        sqlConnectionString="data Source='tcp:s407.winhost.com';database='DB_41_xx';user id='DB_11_xx_user'; password='xx';" /> 
    <trust level="Full"/> 
    <compilation debug="true" targetFramework="4.0"> 
     <assemblies> 
     <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     </assemblies> 
    </compilation> 
    <authentication mode="Forms"> 
     <forms loginUrl="~/" timeout="2880"/> 
    </authentication> 
    <membership> 
     <providers> 
     <clear/> 
     <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/"/> 
     </providers> 
    </membership> 
    <profile> 
     <providers> 
     <clear/> 
     <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/> 
     </providers> 
    </profile> 
    <roleManager enabled="false"> 
     <providers> 
     <clear/> 
     <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/"/> 
     <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/"/> 
     </providers> 
    </roleManager> 
    <pages> 
     <namespaces> 
     <add namespace="System.Web.Helpers"/> 
     <add namespace="System.Web.Mvc"/> 
     <add namespace="System.Web.Mvc.Ajax"/> 
     <add namespace="System.Web.Mvc.Html"/> 
     <add namespace="System.Web.Routing"/> 
     <add namespace="System.Web.WebPages"/> 
     </namespaces> 
    </pages> 
    </system.web> 
    <system.webServer> 
    <validation validateIntegratedModeConfiguration="false"/> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/> 
     <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0"/> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/> 
     <bindingRedirect oldVersion="0.0.0.0-4.0.8.0" newVersion="4.0.8.0"/> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

यहाँ समस्या है:

मेरे उपयोगकर्ता अभी भी कुछ समय बाद लॉग इन हो रहे हैं। मैंने सोचा कि सत्र के लिए एसक्यूएल का उपयोग इस मुद्दे को रोक देगा।

[HttpPost] 
public ActionResult Login(LogOnModel model) 
{ 
    using (EfAccountRepository accountRepository = new EfAccountRepository()) 
    { 
     if (accountRepository.ValidateCredentials(model.Email, model.Password)) 
     { 
      FormsAuthentication.SetAuthCookie(model.Email, true); 
      return RedirectToAction("Index", "Home"); 
     }  
    } 

    ModelState.AddModelError("", "Your email or password is incorrect."); 
    return View(model); 
} 

और यहाँ है कुछ कोड मैं देख रहा हूँ करने के लिए उपयोग करता है, तो उपयोगकर्ता के प्रवेश:

public static MvcHtmlString AdminDashboardLink() 
    { 
     if (SecurityHelpers.UserIsPartOfCompany(HttpContext.Current)) 
     { 
      string html = "<li><a href='/Admin'>ADMIN DASHBOARD</a></li>"; 
      return new MvcHtmlString(html); 
     } 
     else 
     { 
      return new MvcHtmlString(""); 
     } 
    } 

    public static bool UserIsPartOfCompany(HttpContext context) 
    { 
     if (!context.Request.IsAuthenticated) 
      return false; 

     using (EfAccountRepository accountRepository = new EfAccountRepository()) 
     { 
      var loggedInUser = accountRepository.FindByEmail(context.User.Identity.Name); 
      string[] userRoles = accountRepository.GetRolesForUser(loggedInUser.AccountId); 

      return userRoles.Contains("Editor") || userRoles.Contains("Finance") || userRoles.Contains("Administrator"); 
     }    
    } 

यहाँ कैसे मैं में मेरी उन loggin कर रहा हूँ पर कोड के प्रासंगिक सा है

कोई सुझाव? शायद मेरा web.config बॉट किया गया है और यह समस्याएं पैदा कर रहा है। सत्र की जानकारी में जोड़े जाने के बाद शायद मुझे कुछ हटाने की भी आवश्यकता है?

+0

एक ही ब्राउज़र सत्र चल रहा है जब आप देखते हैं उपयोगकर्ता है करने के लिए है लॉगऑफ होता है? –

+0

हां, मैं फ़ायरफ़ॉक्स खोलता हूं, वेबसाइट पर लॉगिन करता हूं (Winhost पर होस्ट किया गया)। थोड़ी देर के लिए एक ही वेबसाइट पर खेलते हैं, और कुछ मिनटों के बाद (कभी-कभी सेकंड बाद में), मैं लॉग ऑफ हूं। –

+0

जब एक एएसपीनेट ऐप पूल रीसायकल करता है, तो यह शून्य/खाली होगा? 'Context.Request.IsAuthenticated'? यदि ऐसा है, तो यह समस्या हो सकती है। अगर मैं एसक्यूएल सत्र में स्विच करता हूं, तो क्या मुझे लॉग इन करने की आवश्यकता है जिस तरह से मैं जांचता हूं कि कोई उपयोगकर्ता लॉग इन है या नहीं? –

उत्तर

4

यह कुछ बार होता है क्योंकि कचरा कलेक्टर आपके आवेदन को सौंपा गया मशीन कुंजी साफ़ करता है और एक नई कुंजी असाइन करता है जो उपयोगकर्ताओं को लॉग आउट करने के लिए प्रेरित करता है। समाधान आपके आवेदन के लिए एक machineKey पैदा करते हैं और तरह

<system.web> 
    <machineKey validationKey="###YOUR KEY HERE ###" 
       decryptionKey="## decrypt key here ##" 
       validation="SHA1" decryption="AES" /> 
... 
... 

system.web तहत web.config में यह जगह इस लिंक मदद मिल सकती है आप http://aspnetresources.com/tools/machineKey

+0

आपकी मदद के लिए धन्यवाद। तो मैंने अपनी कुंजी जेनरेट की और इसे मेरे web.config में रखा। क्या मुझे इसे काम करने के लिए कोई अन्य विकल्प सेट करने की ज़रूरत है, या क्या यह इसे web.config में रखने और करने का मामला है? –

+0

इसे jinx नहीं जा रहा है, लेकिन ऐसा लगता है कि यह सिर्फ web.config फ़ाइल में जोड़ रहा है, इसे हल किया! :) दो घंटों में पुष्टि करेगा; मुझे अभी भी लॉग ऑन होना चाहिए। –

+0

बस इसे कॉन्फ़िगरेशन में रखेगा ... ';)' – Rafay

-1

फॉर्म ऑथ सत्र से संबंधित नहीं है। सत्र सत्र के साथ इसका कोई लेना-देना नहीं है। आवश्यक सब कुछ फॉर्म कुकी में संग्रहित किया जाता है।

ऊपर आपका टाइमआउट 2880 पर सेट किया गया है, इसलिए 48 घंटे यानी दो दिन इसलिए मुझे टाइमआउट होने की उम्मीद होगी।

+0

ठीक है, इसलिए जिस तरह से मैं अपने उपयोगकर्ताओं में लॉग इन कर रहा हूं वह गलत नहीं है और इसे ठीक काम करना चाहिए। दूसरी तरफ, मैं भी एक टाइमआउट होने की उम्मीद करता हूं - लेकिन वर्तमान में वह समय समाप्ति दो दिनों के करीब नहीं है, दो घंटे अकेले रहने दो। कोई अन्य विचार? –

+0

मैं यह देखने के लिए 'HttpContext.Request.Is प्रमाणीकृत' का उपयोग कर रहा हूं यह देखने के लिए कि उपयोगकर्ता लॉग इन हैं या नहीं। क्या यह SQL सत्रों के साथ अच्छी तरह से खेलता है, वैसे ही यह इनप्रोक सत्र (एमवीसी 3 का डिफ़ॉल्ट) पर ठीक काम करता है? –

+0

आप वास्तव में टिकट को डिक्रिप्ट कर सकते हैं और इसे जांच सकते हैं (और इसे लॉग ऑन करें) ताकि आपके पास क्या हो रहा है, इस पर एक बेहतर संभाल है: http://www.hanselman.com/blog/AccessingTheASPNETFormsAuthenticationTimeoutValue।एएसपीएक्स क्या आप सुनिश्चित हैं कि आपके आवेदन में कहीं और सत्र सत्र नहीं है? कुछ लोग सिंक करने की कोशिश करते हैं (या मानते हैं कि वे सिंक हैं, जो वे नहीं हैं) सत्र और ऑथ टाइमआउट बनाते हैं लेकिन वे एक-दूसरे के साथ समन्वयित नहीं रहेंगे। अगर आपके आवेदन में कहीं और कोड है तो लॉगिन पर रीडायरेक्ट करने के लिए रीडायरेक्ट करने के लिए यदि सत्र खाली खाली है, तो यह आपके मुद्दे का एक और स्रोत हो सकता है। –

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

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