Session.Clear(),Session.Abandon(),Session.RemoveAll()的MVC优化?

时间:2010-08-23 19:55:39

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

我正在使用一些应该在用户完成后终止的会话。我偶然发现了这三场杀手。何时是使用这些的最佳时间,因为我使用会话的时间比不是。另外,还有其他会话终止我不知道吗?

3 个答案:

答案 0 :(得分:55)

Session.ClearSession.RemoveAll相同;后者只是称前者。他们会立即删除会话中存储的所有项目,但会话本身仍然存在。 Session_OnEnd不会触发。

Session.Abandon实际上并不会立即清除值,它只是标记在当前请求结束时放弃的会话。您可以继续读取请求其余部分的值。如果您稍后在请求中写入会话,则会在请求结束时悄悄地丢弃新值,而不会发出警告。 Session_OnEnd在请求结束时触发,而不是在调用Abandon时触发。

答案 1 :(得分:13)

Session.Clear不会杀死会话,它会清除所有值。 Session.Abandon实际上会杀死会话。

看起来大部分问题都在这里解决:In ASP.NET, when should I use Session.Clear() rather than Session.Abandon()?

答案 2 :(得分:1)

在这里稍晚但是想分享@stevemegson正确的证据,Session.RemoveAll内部调用Session.Clear

public void Clear()
        {
            this._container.Clear();
        }
        public void RemoveAll()
        {
            this.Clear();
        }

所以

之间完全没有区别

session.Abandon来电

public void Abandon()
        {
            this._container.Abandon();
        }

基本上做:) ..

public void Abandon()
{
    this._abandon = true;
}