मैंने एक नया एमवीसी 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 बॉट किया गया है और यह समस्याएं पैदा कर रहा है। सत्र की जानकारी में जोड़े जाने के बाद शायद मुझे कुछ हटाने की भी आवश्यकता है?
एक ही ब्राउज़र सत्र चल रहा है जब आप देखते हैं उपयोगकर्ता है करने के लिए है लॉगऑफ होता है? –
हां, मैं फ़ायरफ़ॉक्स खोलता हूं, वेबसाइट पर लॉगिन करता हूं (Winhost पर होस्ट किया गया)। थोड़ी देर के लिए एक ही वेबसाइट पर खेलते हैं, और कुछ मिनटों के बाद (कभी-कभी सेकंड बाद में), मैं लॉग ऑफ हूं। –
जब एक एएसपीनेट ऐप पूल रीसायकल करता है, तो यह शून्य/खाली होगा? 'Context.Request.IsAuthenticated'? यदि ऐसा है, तो यह समस्या हो सकती है। अगर मैं एसक्यूएल सत्र में स्विच करता हूं, तो क्या मुझे लॉग इन करने की आवश्यकता है जिस तरह से मैं जांचता हूं कि कोई उपयोगकर्ता लॉग इन है या नहीं? –