asp.net - 如何在 session 超时或结束时注销用户

标签 asp.net session membership logout

session 结束或过期时注销用户的最佳方式是什么?

感谢您的帮助。

最佳答案

这实际上取决于您正在寻找的所需功能。我假设您正在使用 FormsAuthentication。

您需要关注两件不同的事情:SessionFormsAuthentication cookie。除非我弄错了,否则这两个都有单独的超时。

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

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

<authentication mode="Forms"><forms ... timeout="20" ... ><authentication>
<sessionState ... timeout="20" ... />

2:在Page_Load事件中,检查 session 是否超时:

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");
}

(有关检测 session 超时的信息,请参阅 http://www.eggheadcafe.com/articles/20051228.asp)

如果您想要更愉快的用户体验,您可以使用 javascript 在 X 分钟后启动某种模式 UI 弹出窗口。此弹出窗口仅允许用户启动按钮单击,这将触发服务器上的 AJAX 回发,从而扩展其身份验证和 session cookie,而无需重新加载页面。我以前从未实现过这个,但是看看, this guy made an ASP.NET AJAX control !

关于asp.net - 如何在 session 超时或结束时注销用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4413886/

相关文章:

javascript - 没有图像显示

c# - 页面加载后对象是否符合垃圾回收条件?

spring - Session 空指针异常

java - session.invalidate 之后未调用 attributeRemoved

c# - simplemembership MVC4 通过 userId 获取用户名

c# - 检测是否在 ASP.Net 中的移动浏览器上启用了 JavaScript

asp.net - 如何在 Vista 上的 IIS7 下调试 ASP.NET 应用程序?

php - RoR 与 PHP Session 的等价物是什么?

algorithm - 存储精确集合成员的最有效方式?

c# - .NET Membership.GetUser() 在 ie9 和 safari 中嵌入到 iframe 时为 null