Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何在会话超时或结束时注销用户_Asp.net_Session_Membership_Logout - Fatal编程技术网

Asp.net 如何在会话超时或结束时注销用户

Asp.net 如何在会话超时或结束时注销用户,asp.net,session,membership,logout,Asp.net,Session,Membership,Logout,当会话结束或过期时,注销用户的最佳方式是什么 谢谢您的帮助。如果您使用的是.net成员资格提供程序,只需在web.config中设置超时设置即可 这取决于您想要的功能。我假设你使用的是FormsAuthentication 有两件事你需要关注:会话和表单验证cookie。除非我弄错了,否则这两个都有不同的超时 如果您遇到的问题是会话超时,但用户仍然经过身份验证,则可以尝试以下组合: 1:确保身份验证cookie与会话具有相同的超时值: <authentication mode="Forms

当会话结束或过期时,注销用户的最佳方式是什么


谢谢您的帮助。

如果您使用的是.net成员资格提供程序,只需在web.config中设置超时设置即可

这取决于您想要的功能。我假设你使用的是FormsAuthentication

有两件事你需要关注:会话表单验证cookie。除非我弄错了,否则这两个都有不同的超时

如果您遇到的问题是会话超时,但用户仍然经过身份验证,则可以尝试以下组合:

1:确保身份验证cookie与会话具有相同的超时值:

<authentication mode="Forms"><forms ... timeout="20" ... ><authentication>
<sessionState ... timeout="20" ... />
(有关检测会话超时的信息,请参阅)


如果您想要更愉快的用户体验,可以使用javascript在X分钟后启动某种模式的UI弹出窗口。这个弹出窗口只允许用户启动一个按钮点击,这将触发服务器上的AJAX回发,从而扩展他们的身份验证和会话cookie,而无需重新加载页面。我以前从未实现过这个,但是你看

您的意思是简单地让用户成为未经身份验证的用户,还是在用户等待太久且会话已过期后将用户重定向到某个“嘿,您超时了!”页面?会话结束时,他们发出的下一个请求将是未经身份验证的。在这种情况下,您的页面可以在加载新页面时进行检查。如果它们在同一页面上的时间过长,要重定向它们,您需要将javascript写入具有等于会话超时值的倒计时计时器的页面。当计时器达到零重定向时,因为会话无效。(有点-一个警告是,如果他们在另一个选项卡中浏览您的站点-这将保持会话活动,而第一个选项卡javascript仍将倒计时)
if (context.Session != null && Context.Session.IsNewSession == true &&
    Page.Request.Headers["Cookie"] != null &&
    Page.Request.Headers["Cookie"].IndexOf("ASP.NET_SessionId") >= 0)
{
    // session has timed out, log out the user
    if (Page.Request.IsAuthenticated)
    {
        FormsAuthentication.SignOut();
    }
    // redirect to timeout page
    Page.Response.Redirect("/Timeout.aspx");
}