ASP.NET 窗体身份验证超时和会话超时
Posted
技术标签:
【中文标题】ASP.NET 窗体身份验证超时和会话超时【英文标题】:ASP.NET Forms Authentication Timeout and Session Timeout 【发布时间】:2015-11-05 22:38:24 【问题描述】:我在 asp.net 中使用表单身份验证。我已将超时设置为 1 分钟。一旦我登录,如果通过身份验证,我将被重定向到主页 (HomePage.aspx)。这工作正常。如果我离开该网站并在 1 分钟后返回,并尝试访问任何其他页面,我将按预期重定向到登录页面。我的问题是,如果我回来做一些回帖或刷新,那么只有我被重定向到登录页面,否则我将留在同一页面上。如果我在 1 分钟后回来,我应该怎么做才能让登录页面出现在屏幕上。
<authentication mode="Forms">
<forms loginUrl="~/LoginPage.aspx" timeout="1"/>
</authentication>
<sessionState timeout="1"></sessionState>
【问题讨论】:
您好,感谢您的回答。下面的帖子也有帮助。***.com/questions/15991652/asp-net-automatic-logout 【参考方案1】:在Global.asax
中检查您的Session_End
,然后尝试输入一些代码以重定向到您的登录页面。
【讨论】:
【参考方案2】:您可以关注asp-net-push-redirect-on-session-timeout。这篇 SO 帖子展示了在页眉部分使用 <meta>
进行重定向的方法。我尚未对其进行测试,但我怀疑设置<meta>
,即使对于未登录的页面,它也可能总是在会话超时后重定向,特别是如果它在MasterPages
中实现。
如果您不想使用标头或想要自定义基于 javascript 的解决方案,您可以这样做:
<script type="text/javascript">
// get session timeout value
var sessionTimeout = '<%= Session.Timeout %>';
// convert from minutes to ms
var sTimeout = parseInt(sessionTimeout) * 60 * 1000;
setTimeout('SessionWarning()', sTimeout);
function SessionWarning()
// use a session variables (User_ID) that confirms we have a logged in user
var userid = '<%= Session("User_ID") %>';
// ignore for pages that can be viewed without login. In that case User_ID will not be set
// also on session end User_ID needs to be set to zero/null/blank
if (userid == '')
else
if (parseInt(userid) > 0)
// if the user is logged in redirect to login page on session timeout
window.location.href= '/LoginPage.aspx';
</script>
您可以将此脚本放置在您想要自动重定向的页面上,或放在MasterPage
上以便在所有页面上使用。
【讨论】:
以上是关于ASP.NET 窗体身份验证超时和会话超时的主要内容,如果未能解决你的问题,请参考以下文章
Asp.net 形成身份验证 cookie 不遵守 IIS7 的超时
根据 ASP.NET 中的角色设置身份验证 cookie 超时长度
带有 Windows 身份验证的 ASP.Net Core 3.1 中的空闲超时