我已将以下配置设置为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