您好,我使用asp.net 4.5和asp.net会员资格创建了一个网站应用程序。如果用户不使用网站(如Facebook),我希望用户会话过期。
我已在会话的web.config
中设置了超时,但是如果用户工作或不工作,则此时间结束(超时)。有什么我想念的吗?
<authentication mode="Forms">
<forms loginUrl="~/Pages/Login.aspx" slidingExpiration="true" timeout="1"></forms>
</authentication>
答案 0 :(得分:0)
在设置表单auth cookie时,您需要设置cookie的到期时间并在应用程序中创建一个http模块,在该模块中检查请求标头中的auth cookie,如果它不存在,则注销用户并重定向到登录页面。如果cookie存在,只需重置响应中cookie的到期时间。
答案 1 :(得分:0)
请参阅此link。这是我目前帮助其他用户的答案。这应该会告诉您如何在用户登录后启动会话。
编辑:不确定为什么选择downvote,但这里是代码。
更改每个表单身份验证和会话状态的超时,如下所示。
<authentication mode="Forms">
<forms loginUrl="~/Account/Login.aspx" defaultUrl="~/Dashboard.aspx" timeout="60"/>
</authentication>
<sessionState timeout="60" mode="InProc" cookieless="false" />
然后,将其放入页面加载下的Site.Master.cs中。
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
// Handle the session timeout
string sessionExpiredUrl = Request.Url.GetLeftPart(UriPartial.Authority) + "/DealLog/Account/SessionExpired.aspx";
StringBuilder script = new StringBuilder();
script.Append("function expireSession(){ \n");
script.Append(string.Format(" window.location = '{0}';\n", sessionExpiredUrl));
script.Append("} \n");
script.Append(string.Format("setTimeout('expireSession()', {0}); \n", this.Session.Timeout * 60000)); // Convert minutes to milliseconds
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "expirescript", script.ToString(), true);
}
只有在用户通过身份验证后,会话才会过期。用户登录,变为非活动状态,然后会话超时。一旦超时,转到SessionExpired页面。在会话过期页面上,放置
FormsAuthentication.SignOut();
在页面加载中,以便签出用户。然后,您可以从那里设置重定向。身份验证和会话状态超时都是几分钟。 60 = 1小时。
编辑2:用户删除了我的答案中链接的问题的用户。对不起。希望这会有所帮助。