我正在使用FormsAuthentication和ASP.Net SqlMembership Provider.我希望在基础会话过期时提供重定向到LogIn页面的功能.
我将以下代码块放在我的BasePage OnInit中.据我测试,它始终保持重定向到LogIn页面,即使我提供了正确的UserID和密码.通过权利,它应该带我到默认页面.
if (Context.Session != null && Session.IsNewSession && this.Request.IsAuthenticated)
{
string cookieHeader = Request.Headers["Cookie"];
if (cookieHeader != null && cookieHeader.IndexOf("ASP.NET_SessionId") >= 0)
{
HttpContext.Current.Session.Abandon();
FormsAuthentication.SignOut();
Response.Redirect(FormsAuthentication.LoginUrl);
}
}
Run Code Online (Sandbox Code Playgroud)
Paw*_*iak 20
您不需要任何自定义代码来实现此功能,它受Framework支持.只需在web.config中配置它:
<authentication mode="Forms">
<forms defaultUrl="~/Default.aspx"
loginUrl="~/Login.aspx"
slidingExpiration="true"
timeout="60" />
</authentication>
Run Code Online (Sandbox Code Playgroud)
使用上面的配置,用户将在会话到期时始终重定向到Login.aspx页面.超时为60分钟,滑动到期意味着每次用户向Web应用程序发出请求时都会延长超时,因此如果他保持活动状态,则会话将不会过期.像这样的配置比你试图做的更具优势 - 一旦用户登录,他将自动重定向回他最初请求的资源.您始终可以覆盖和自定义此行为.
Kev*_*Kev 13
Pawel的答案部分正确,但您还需要将Session生命周期设置为比表单身份验证cookie生命周期更长的值.表单身份验证timeout值仅影响身份验证cookie的生命周期.在他提供的示例中,身份验证cookie生存期为60分钟,但默认会话生存期为20分钟.如果用户离开他们的机器超过20分钟,他们的会话数据将被丢弃,随后尝试引用存储在会话中的值将导致抛出异常(例如,System.NullReferenceException如果尝试.ToString()或转换).
您可以通过配置sessionStateweb.config文件中的设置在应用程序中全局设置:
<sessionState
mode="InProc"
cookieless="false"
timeout="70"/>
Run Code Online (Sandbox Code Playgroud)
在会话超时中添加五或十分钟可提供良好的缓冲区.
| 归档时间: |
|
| 查看次数: |
27855 次 |
| 最近记录: |