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

时间:2016-05-02 14:43:51

标签: c# asp.net session session-variables

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

Session["Variable"] = "Assigned";

我可以为这样的用户删除此变量

Session.Remove("Variable");

我可以从所有用户中删除此变量吗?如果是,怎么样?

1 个答案:

答案 0 :(得分:1)

我想跟你问一下我的答案"我可以......"。只因为你可以,并不意味着你应该。另外,重申上述评论,为什么要这样做呢?您的设计可能存在缺陷。除非您帮助我们理解,否则我们无法为您提供帮助。

理论上可以进行InProc会话。但是,我不推荐它,因为它不适用于农场或会话解决方案。还有一些线程安全问题你需要注意哪些问题让我回到了"为什么?"。

但是,我可以回答"我可以..."而不是"我应该..."这几乎让我感到畏缩,给出了答案。但是,使用此风险需要您自担风险,并且未经过测试。

此外,如果您使用的是缓存服务器或其他会话状态服务器,则会将其抛出窗口。  在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恕我直言并迭代它们。

请再次阅读其他评论中的建议。请记住,有一种方法可以给猫皮肤。