IT story

ASP.NET에서 Session.Abandon () 대신 Session.Clear ()를 언제 사용해야합니까?

hot-time 2020. 7. 29. 07:42
반응형

ASP.NET에서 Session.Abandon () 대신 Session.Clear ()를 언제 사용해야합니까?


Session.Clear () 및 Session.Abandon () 모두 세션 변수를 제거합니다. 내가 이해하는 것처럼 Abandon ()은 현재 세션을 종료하고 새 세션이 만들어 지므로 End 및 Start 이벤트가 발생합니다.

대부분의 경우 사용자 로그 아웃과 같은 Abandon ()을 호출하는 것이 좋습니다. Clear ()를 대신 사용하는 시나리오가 있습니까? 성능 차이가 많이 있습니까?


Session.Abandon() 세션을 파괴 하고 이 Session_OnEnd 이벤트가 트리거됩니다.

Session.Clear()단지 모든 값을 제거 개체에서 (내용을). 동일한 키를 가진 세션이 여전히 활성 상태입니다.

따라서를 사용 Session.Abandon()하면 특정 세션이 손실되고 사용자는 새 세션 키를 얻게됩니다. 예를 들어 사용자가 로그 아웃 할 때 사용할 수 있습니다.

를 사용하여 Session.Clear(), 사용자가 (당신이 예를 들어 다시 로그인 사용자를 원하지 않는 경우) 동일한 세션에 남아있는 모든 세션 특정 데이터를 다시 설정합니다.


사용자가 로그 아웃 할 때 Session.Clear () 만 사용하면 보안 허점이 발생할 수 있습니다. 웹 서버에 관한 한 세션은 여전히 ​​유효합니다. 세션 ID를 스니핑하고 잡아 당겨 해당 세션을 가로채는 것은 상당히 사소한 일입니다.

이러한 이유로, 사용자를 로그 아웃 할 때 Session.Abandon ()을 사용하는 것이 안전하고 합리적이므로 세션이 소멸되고 새 세션이 생성됩니다 (로그 아웃 UI 페이지가 새 세션의 일부이더라도 새 세션에는 사용자 세부 정보가 없으며 새 세션을 가로채는 것은 새로운 세션을 갖는 것과 동일하므로 음소거됩니다.


난 안 당신이 사용하는 거라고 어디 실제 예제가 무엇인지 아직이야 Session.Abondon(), Session.Clear().

이해할 수 있습니다 ... 사용자가 로그 아웃 링크를 클릭하여 "로그 아웃했습니다"페이지로 이동 한 경우 ... 브라우저 세션은 계속 진행 중이지만 세션에 저장된 정보를 제거하려고합니다. 세션을 결합한 경우 "로그 아웃되었습니다"페이지에 대한 새 세션이 바로 생성됩니다.


Session.Abandon위에서 언급 한대로 세션을 삭제하므로 누군가 로그 아웃 할 때이 세션을 사용해야합니다. Session.Clear전자 상거래 웹 사이트에서 쇼핑 바구니를 잘 사용한다고 생각합니다 . 이렇게하면 사용자를 로그 아웃하지 않고 바스켓이 지워집니다.


이 문제가 발생하여 두 가지 모두 시도했지만 "pageEditState"와 같은 크랩을 제거하기 위해 정착했지만 사용자 정보를 제거하지 않아야 다시 찾아 볼 필요가 없습니다.

public static void RemoveEverythingButUserInfo()
{
    foreach (String o in HttpContext.Current.Session.Keys)
    {
        if (o != "UserInfoIDontWantToAskForAgain")
            keys.Add(o);
    }
}

참고 URL : https://stackoverflow.com/questions/347377/in-asp-net-when-should-i-use-session-clear-rather-than-session-abandon

반응형