我正在使用一些应该在用户完成后终止的会话。我偶然发现了这三场杀手。何时是使用这些的最佳时间,因为我使用会话的时间比不是。另外,还有其他会话终止我不知道吗?
答案 0 :(得分:55)
Session.Clear
和Session.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;
}