programing

ASP.NET에서는 세션을 언제 사용해야 합니까?세션이 아닌 클리어()입니다.포기()?

goodsources 2023. 4. 21. 20:48
반응형

ASP.NET에서는 세션을 언제 사용해야 합니까?세션이 아닌 클리어()입니다.포기()?

양쪽 세션Clear() 및 Session.포기() 세션 변수를 삭제합니다.제가 알기론 포기()는 현재 세션을 종료하고 새 세션을 생성함으로써 종료 이벤트와 시작 이벤트가 발생합니다.

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

Session.Abandon() 세션이 파기되고 Session_OnEnd 이벤트가 트리거됩니다.

Session.Clear()개체에서 모든 값(내용)을 제거합니다.같은 키를 가진 세션이 아직 활성화되어 있습니다.

그래서 만약에Session.Abandon()특정 세션이 손실되면 사용자는 새로운 세션키를 받게 됩니다.예를 들어 사용자가 로그아웃할 때 사용할 수 있습니다.

사용하다Session.Clear()사용자가 같은 세션에 남아 있는 경우(예를 들어 사용자가 다시 로그인하지 않는 경우) 세션 고유의 모든 데이터를 리셋합니다.

세션만 사용.Clear()는 사용자가 로그아웃할 때 보안에 구멍이 생길 수 있습니다.웹 서버에 관한 한 세션은 아직 유효합니다.그 후, 스니핑하여 세션 ID를 취득하여 세션을 하이잭하는 것은 상당히 간단한 문제입니다.

따라서 사용자를 로그아웃할 때는 Session을 사용하는 것이 보다 안전하고 현명합니다.세션이 파기되고 새로운 세션이 생성됩니다(로그아웃 UI 페이지는 새로운 세션의 일부가 되더라도 새로운 세션에는 사용자의 상세 정보가 포함되어 있지 않으며 새로운 세션을 하이잭하는 것은 새로운 세션을 갖는 것과 같기 때문에 뮤트가 됩니다).

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

반응형