2012-03-16 20 views
6

bir süre sonra dışarı yapılıyor ve WinHost temel planı üzerinde barındırılmaktadır.Ben yeni MVC3 uygulaması yapılan

sorunun özü, uygulama havuzu bellek sınırlara ulaşıldığında ve her seans ınproc dışarı kaydedilir kullanıcılarıma anlam silinir.

İşte

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

yukarıda belirtilen adımları izledikten sonra benim web.config içeriğini geçerli::

onların belgelerine göre, bu görüyorum İşte

<?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> 

sorun yatıyor:

Benim kullanıcıların hala bir süre sonra bir günlüğe alıyorsanız. Oturum için SQL kullanmanın bu sorunu önleyeceğini düşündüm.

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"); 
     }    
    } 
: Burada

[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); 
} 

Ve kullanıcı giriş görmekten kullanan bazı kod edilir:

İşte benim kullanıcıları loggin ediyorum nasıl kod alakalı biraz

Herhangi bir öneriniz var mı? Belki de web.config'im bitti ve bu sorunlara neden oluyor. Belki de oturum bilgisine ekledikten sonra bir şeyleri kaldırmam gerekiyor mu?

+0

gördüğünüzde aynı tarayıcı oturumunu çalıştıran kullanıcı mı yardımcı olabilecek

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

gibi System.Web altında web.config'de onu yerleştirmektir Logon olur? –

+0

Evet, Firefox'u açın, web sitesine giriş yapın (Winhost'da barındırılan). Aynı web sitesinde biraz oynayın ve birkaç dakika sonra (bazen saniye sonra), çıkış yapıyorum. –

+0

Bir asp.net uygulama havuzu geri döndüğünde, bu boş/boş olacak mı? 'Context.Request.IsAuthenticated'? Eğer öyleyse, bu soruna neden olabilir. SQL oturumuna geçtiysem, bir kullanıcının giriş yapıp yapmadığımı kontrol etmem gerekir mi? –

cevap

4

Bazı kere neden olmaktadır. Çözüm uygulamanız için bir machineKey oluşturmak ve bu link size http://aspnetresources.com/tools/machineKey

+0

Yardımlarınız için teşekkür ederiz. Bu yüzden anahtarımı oluşturdum ve web.config dizinine yerleştirdim. Çalışması için başka bir seçenek belirlemem gerekir mi yoksa sadece web.config dosyasına yerleştirme ve bitti mi? –

+0

Jinx'e gitmeyecek, ancak bunu sadece web.config dosyasına ekleyerek çözdünüz, çözdünüz! :) İki saat içinde teyit edecek; Hala oturum açmalıyım. –

+0

sadece yapılandırmaya yerleştirmek yapardı ... ';)' – Rafay

-1

Formlar auth, oturumla ilgili değildir. Oturum durumu ile ilgisi yok. Gereken her şey, formlar auth çerezinde saklanır.

Kişisel aşımı yukarıdaki böylece 48 saat yani iki gün bu yüzden zaman aşımı gerçekleşmesi beklenir, 2880 ayarlanır. Çöp toplayıcı uygulamanıza atanan makine anahtarını temizler ve kullanıcıların oturumu için looged neden yeni bir anahtar atar çünkü

+0

Tamam, bu yüzden kullanıcılarımda oturum açmam yanlış ve gayet iyi çalışmalı. Öte yandan, ben de bir zaman aşımı gerçekleşmesini beklerim - ama şu anda bu iki saat değil, iki güne yakın zaman aşımı bile yakın değil. Başka fikirlerin var mı? Kullanıcıların açtıysa 'HttpContext.Request.IsAuthenticated' görmek için –

+0

kullanıyorum. Does SQL Oturumlar, bu ınproc seans (MVC3 varsayılan) üzerinde çalışıyor aynı şekilde güzel bu oyun? –

+0

Aslında bir biletin şifresini çözebilir ve kontrol edebilir (ve günlüğe kaydedebilirsiniz), böylece neler olup bittiğini daha iyi anlayabilirsiniz: http://www.hanselman.com/blog/AccessingTheASPNETFormsAuthenticationTimeoutValue.aspx uygulamanızda başka bir yerde başka oturum kontrolleri olmadığından emin misiniz? Bazı kişiler senkronize edilmeye çalışır (ya da olmadıklarını varsayarlar) ve oturumları zaman aşımına uğrar, ancak birbirleriyle senkronize olmayacaklardır. Oturumunuz boşsa, girişinize yeniden yönlendirmek için uygulamanızda başka bir kodunuz varsa, bu, sorununuzun başka bir kaynağı olabilir. –