Asp.net 会话变量清除方法是否仅清除当前浏览器会话?

Asp.net 会话变量清除方法是否仅清除当前浏览器会话?,asp.net,.net,login,session-variables,session-state,Asp.net,.net,Login,Session Variables,Session State,以下会话变量清除方法用于注销单击 Session.Clear(); Session.RemoveAll(); Session.Abandon(); 如果我在两个浏览器中打开我的网站,并从一个浏览器中注销。会话变量在第二个浏览器中没有清除。因此它不会重定向到注销 上述方法将仅清除当前浏览器会话变量?删除所有浏览器会话的有效方法是什么???您好,如果您使用的是母版页,则在内部而不是页面回发,请使用此代码 Response.Cache.SetCacheability(HttpCacheabili

以下会话变量清除方法用于注销单击

Session.Clear(); 
Session.RemoveAll();
Session.Abandon();
如果我在两个浏览器中打开我的网站,并从一个浏览器中注销。会话变量在第二个浏览器中没有清除。因此它不会重定向到注销


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

您好,如果您使用的是母版页,则在内部而不是页面回发,请使用此代码

Response.Cache.SetCacheability(HttpCacheability.NoCache);
SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetNoStore();
if(会话[“ObjUser”]==null)
{
重定向(“~/UI/Login.aspx”,true);
}
if(HttpContext.Current.Request.urlReferer==null)
{
重定向(“~/UI/Login.aspx”,true);

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

要销毁所有会话,假设您正在对会话状态使用InProc模式(还有其他模式=>),您可以通过重新启动应用程序池来销毁所有会话。有

p/s:ServerManager类驻留在包中。此行为不应在注销事件中实现

也可以选择重新启动应用程序池

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

请参阅,在注销事件中重新启动应用程序池是一种良好做法。你能说出同样的缺点吗?不,我们永远不应该在注销事件中这样做。这样做是不对的。当我们确实需要这样做时(通常是在出现数据缓存、内存泄漏等问题时),代码只是为了提供信息。那么,从所有浏览器中清除会话的最佳方法是什么。这可以在注销事件中完成?“这可以在注销事件中完成?”,我不这么认为。我还没有看到我们在应用程序代码中需要这种逻辑。使用IIS管理器或修改web.config是很方便的。@hazjack:我是否需要在注销时使用上面提到的代码?
        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();