一次从所有会话中只删除一个变量

Delete only one variable from all session at once

假设我有一个这样的会话变量:

Session["Variable"] = "Assigned";

我可以像这样为一个用户删除这个变量

Session.Remove("Variable");

我可以只从所有用户中删除这个变量吗?如果是,如何?

我想先回答你的问题 "Can I..."。仅仅因为你可以,并不意味着你应该。另外,重申一下上面的评论,你为什么要这样做?您的设计可能存在缺陷。除非您帮助我们理解,否则我们无能为力。

InProc 会话在理论上是可行的。但是,我不推荐它,因为它不适用于农场或会话解决方案。您还需要注意一些线程安全问题,这让我回到 "why?"。

但是,我可以回答 "Can I..." 而不是 "Should I..." 这几乎让我不敢回答。但是,使用它需要您自担风险,并且未经测试。

此外,如果您使用的是缓存服务器或其他会话状态服务器,这会被抛出 window。 在您的 Global.asax 或 IoC 容器中,您可以拥有类似于此的集合:

protected void Application_Start(object sender, EventArgs e)
{
    Application["allSessions"] = new List<HttpSessionState>();
}

protected void Session_Start(object sender, EventArgs e)
{
    var allSessions= (List<HttpSessionState>)Application["allSessions"];
    sessions.Add(this.Session);
}

protected void Session_End(object sender, EventArgs e)
{
    var sessions = (List<HttpSessionState>)Application["allSessions"];
    sessions.Remove(this.Session);
}

然后您可以拉取 allSessions 的会话变量,恕我直言,这是一个 hacky 并迭代它们。

再次,请阅读其他评论中的建议。请记住,剥猫皮的方法不止一种。