Session.Clear()与Session.RemoveAll()

Nis*_*mar 43 c# asp.net session-state

有没有之间的差异Session.Clear()Session.RemoveAll()

描述和文档页面似乎完全相同,但我假设必须有一些创建两个函数的原因,我是对的吗?

Dar*_*rov 121

绝对一样.内部RemoveAll呼叫Clear.来自Reflector:

public sealed class HttpSessionState : ICollection, IEnumerable
{
    ...

    [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
    public void RemoveAll()
    {
        this.Clear();
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案; 非常确定的.我想知道为什么当一个人只是打电话给另一个时,MS包括两种方 无论如何,这回答了我的问题,我现在只使用Clear(),因为它更容易输入和更直接. (4认同)

Eti*_*nne -7

为了节省你总是可以像这样称呼他们......

Session.Clear()
Session.Abandon()
Session.RemoveAll()
Run Code Online (Sandbox Code Playgroud)

VB.NET 示例,我确信您所需要做的就是放置 ; 在他们每个人的最后。这对我来说很有效,因为我的会话在没有被删除之前遇到了一些问题。

  • 注意:Clear 和RemoveAll 只是删除所有条目(用户保留相同的SessionId);放弃结束整个会话(用户获得新的SessionId)。 (21认同)
  • 达林·季米特洛夫的答案应该被标记为答案,因为它真正解决了所问的问题。这实际上并没有回答这个问题,它询问了两种方法之间的差异,并且实际上给出了一个糟糕的答案,因为它建议当两者功能相同时调用 Clear 和 RemoveAll,因此是多余的。 (17认同)
  • 这应该被否决。放弃和清除/删除全部有很大不同。 (4认同)
  • 另外,.Abandon() 仅在请求结束时生效,因此调用 Session.Abandon() 然后调用 Session.Add("foo", bar) 将导致会话被放弃。不要每次都调用每个方法,因为它在大多数情况下都有效。 (2认同)