2017-08-09 212 views
6

我有一個ASP.NET Core 1.1.2項目,使用Cookie身份驗證。我遇到了一個問題,即用戶在閒置一小時或更少時間後會被提示重新登錄,並且會失去工作。下面的代碼是我在Startup.cs中的Configure函數中使用的,用於設置此功能,並且從我所知道的情況來看,它至少應在8小時後過期。順便說一句,ProjectProcessFlow只是項目的名稱。在ASP.NET核心中Cookie身份驗證過期過早

app.UseCookieAuthentication(new CookieAuthenticationOptions() 
    { 
    AuthenticationScheme = "ProjectProcessFlow", 
    LoginPath = new PathString("/Account/Login/"),  
    ExpireTimeSpan = new TimeSpan(8, 0, 0), 
    SlidingExpiration = true, 
    AutomaticAuthenticate = true, 
    AutomaticChallenge = true 
    }); 

我在NuGet中包含Microsoft.AspNetCore.Authentication.Cookies v1.1.2。我需要做什麼才能在預期的時間內實現登錄到期?

附加信息:

我發現,當超時發生,用戶被要求重新登錄,警告被記錄在事件查看器,它找不到下的日誌文件在服務器上該項目。所以我創建了該文件夾,並等待超時再次發生。

Hosting environment: Production 
Content root path: C:\inetpub\wwwroot\Sprout 
Now listening on: http://localhost:13423 
Application started. Press Ctrl+C to shut down. 

當我重複這個過程,同樣的事情發生,但不同數量後出現「本地主機:」當發生這種情況,在日誌文件中包含這一點,文件夾中創建。我應該提到項目名稱是ProjectProcessFlow,但URL以Sprout結尾。

+0

這只是一個猜測,但它可能是相關的,你有沒有啓用的會議嗎?通過'services.AddSession'? –

+0

是的,AddSession和UseSession都在Startup.cs中被調用 – Rono

+0

在你的web.config文件中還應該有一個設置。 –

回答

2

用戶在被閒置一小時後會被提示重新登錄,並且失去工作。

我有類似的configuration,但它對我來說工作正常。

我能想到的一件事是你不能讓Web服務器閒置20分鐘。 IIS的應用程序池默認空閒超時是20分鐘(我不能說其他Linux網絡服務器)

因此,您可以設置較長的應用程序池超時(0表示無窮大),或者從外部服務(如Monitis)每隔5分鐘ping一次。

enter image description here

+1

而不是設置您的建議之一,我將空閒超時操作更改爲暫停,並解決了我的問題。既然你有我95%的路,你會得到賞金。 – Rono

1

你有services.AddIdentity在ConfigureServices方法設置?

  services.AddIdentity<ApplicationUser, IdentityRole>(config => 
     {    
      // Require a confirmed email in order to log in 
      config.SignIn.RequireConfirmedEmail = true; 
      // Cookie settings 
      config.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromHours(10); 
      config.Cookies.ApplicationCookie.LoginPath = "/Account/LogIn"; 
      config.Cookies.ApplicationCookie.LogoutPath = "/Account/LogOut"; 
     }).AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders(); 

我也有類似的問題,解決了在這裏 ASP.NET MVC Core Identity & Cookies