当用户不使用网站时,如何使会话失效?

时间:2013-09-21 08:31:54

标签: c# asp.net

您好,我使用asp.net 4.5和asp.net会员资格创建了一个网站应用程序。如果用户不使用网站(如Facebook),我希望用户会话过期。

我已在会话的web.config中设置了超时,但是如果用户工作或不工作,则此时间结束(超时)。有什么我想念的吗?

<authentication mode="Forms">
  <forms loginUrl="~/Pages/Login.aspx" slidingExpiration="true" timeout="1"></forms>
</authentication>

2 个答案:

答案 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:用户删除了我的答案中链接的问题的用户。对不起。希望这会有所帮助。