我已將以下配置設置爲LockOut.DefaultLockoutTimeSpan
設置爲2 hours
和ApplicationCookie.ExpireTimeSpan
設置爲one day
。但是,如果應用閒置2個小時,則不會將用戶重定向到login page
。在下面的View
中,我使用Ajax
,tabtrip中選項卡的單擊事件獲取選項卡的ID並將其傳遞給調用操作方法。但我注意到,如果我將應用程序閒置2小時,然後單擊該選項卡,它會將id值作爲空值傳遞,因此,如預期的那樣,操作方法失敗,並顯示Ajax方法的錯誤塊中的警報消息。 問題:如何在登錄會話過期時讓應用重定向到登錄頁面?很顯然,我在下面的代碼中錯過了一些東西。我正在使用ASP.NET Identity-3進行身份驗證。ASP.NET Core在會話超時後未重定向到登錄頁
UPDATE:
正在發生的事情是,我已經被存儲在跨越頁面中使用的一些價值觀三個重要的會話變量。這些價值每隔15-20分鐘左右就會消失。因此,應用程序將錯誤消息拋出到Ajax代碼錯誤塊的警報(...)對話框中。所以我認爲它與認證cookie早日到期有關。但似乎這個問題與會議到期時間的關係比我需要的時間更早。
StartUp.cs
...
public void ConfigureServices(IServiceCollection services)
{
...
// Add framework services.
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, ApplicationRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddMvc();
services.AddDistributedMemoryCache();
services.AddSession();
services.Configure<IdentityOptions>(options => {
// Lockout settings
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(120); //The amount of time in minutes a user is locked out when a lockout occurs
// Cookie settings
options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromDays(1); //Controls how much time the authentication ticket stored in the cookie will remain valid from the point it is created. Defaults to 14 days.
options.Cookies.ApplicationCookie.LoginPath = "/Account/LogIn"; //When a user is unauthorized, they will be redirected to this path to login. Defaults to /Account/Login.
options.Cookies.ApplicationCookie.LogoutPath = "/Account/LogOut";
});
// Add application services.
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
}
...
MyView的:
<html>
...
<div>Tabstrib here with tab1, tab2</div>
...
@section scripts
{
@{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
<script>
$(document).ready(function() {
...
$('#myTabstripID li').click(function() {
var li_id = $(this).attr("id");
$.ajax({
url: '@Url.Action("ActionName", "ContrlName")',
data: { calledFrom: li_id },
contentType: 'application/json',
dataType: 'html',
type: 'GET',
cache: false,
success: function (data) {
if (li_id == 'Tab1')
$('#menuAP').html(data);
else if (li_id == 'Tab2')
$('#menuUP').html(data);
},
error: function (jqXHR, textStatus) {
alert('Error occurred');
}
});
});
...
}
當一個Ajax調用訪問一個網站,而該網站需要重新認證,不應該返回一個401(需要授權)響應,而不是重定向到登錄頁面?我認爲這是Web API的本質。 –
@Afshar我沒有使用Web API - 這是一個Web應用程序。但我明白你的觀點。這個問題似乎與會話變量到期有關 - 我已經爲該帖子添加了一個** UPDATE **部分。你想知道如何解決會話變量相關的問題嗎? – nam