【问题标题】:Session variable clearing methods will clear current browser sessions only?会话变量清除方法只会清除当前浏览器会话?
【发布时间】:2015-07-07 14:13:00
【问题描述】:

注销点击时使用以下会话变量清除方法

Session.Clear(); 
Session.RemoveAll();
Session.Abandon();

如果我在两个浏览器中打开我的网站并从一个浏览器中注销。会话变量未在第二个浏览器中清除。因此它不会重定向到注销。

上述方法只会清除当前浏览器会话变量吗?删除所有浏览器会话的有效方法是什么?

【问题讨论】:

标签: asp.net .net login session-variables session-state


【解决方案1】:

一般来说,当两个浏览器连接到你的网站时,会有两个不同的会话被实例化。每个会话中的信息独立于所有其他会话。因此,当您删除/清除会话时,只有当前会话会受到影响。

要销毁所有会话,假设您使用 InProc 模式进行会话状态(还有其他模式 => https://msdn.microsoft.com/en-us/library/ms178586(v=vs.140).aspx),您可以通过重新启动应用程序池来销毁所有会话。有some examples on MSDN site

        ServerManager serverManager = new ServerManager();
        ApplicationPoolCollection applicationPoolCollection = serverManager.ApplicationPools;
        foreach (ApplicationPool applicationPool in applicationPoolCollection)
        {
            //...
            applicationPool.Recycle();
            //...
        }
        // CommitChanges to persist the changes to the ApplicationHost.config.
        serverManager.CommitChanges();

P/s:ServerManager 类位于Microsoft.Web.Administration 包中。此行为不应在注销事件中实现。

还有重启应用程序池的选项

  • 修改 web.config 文件
  • 升级新的 .dll 文件
  • 使用 IIS 管理器

【讨论】:

  • 在注销事件中重新启动应用程序池是否是一个好习惯。你能说出相同的缺点吗??
  • 不,我们不应该在注销事件中这样做。如果这样做是错误的。该代码仅在我们真正需要时提供信息(通常是在出现数据缓存、内存泄漏等问题时......)。
  • 那么从所有浏览器中清除会话的最佳方法是什么。可以在注销事件中完成?
  • “这可以在注销事件中完成吗?”,我不这么认为。我还没有看到我们在应用程序代码中需要这个逻辑。使用IIS管理器或者修改web.config很方便。
  • @hazjack: 我是否需要在我的注销点击中使用你上面提到的代码?
【解决方案2】:

您好,如果您使用的是母版页,那么在页面内而不是页面回发中使用此代码

Response.Cache.SetCacheability(HttpCacheability.NoCache);
                Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
                Response.Cache.SetNoStore();
                if (Session["ObjUser"] == null)
                {
                    Response.Redirect("~/UI/Login.aspx", true);
                }
                if (HttpContext.Current.Request.UrlReferrer == null)
                {
                    Response.Redirect("~/UI/Login.aspx", true);
                }

所以这里的会话 objuser 是你当前的用户会话.. 如果不使用母版页,则直接将此代码放入您的登录中,而不是回发。 我已经检查过这两个浏览器都可以正常工作。

【讨论】:

    猜你喜欢
    • 2021-07-07
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多