본문 바로가기

ASP.net with C# (웹폼)

C# 세션 삭제하기

C# 웹프로그램에서 세션을 완전히 삭제하려면 다음의 세 줄을 코딩하셔야 합니다.

 

1. 페이지에서 세션삭제 처리시

Session.Clear(); //세션에 저장된 값 삭제
Session.Abandon(); //세션 컬렉션을 삭제
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", "")); //세션에 사용했던 쿠키삭제

 

2. 클래스에서 세션삭제 처리시 (HttpContext.Current를 붙여주세요)

HttpContext.Current.Session.Clear();
HttpContext.Current.Session.Abandon();
HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

Q1) Session.Clear() 와 Session.Abandon()의 차이는 무엇인가?

Clear()는 세션에 저장된 키와 값만 삭제합니다. Abandon()은 세션객체를 삭제합니다. 많은 분들이 이에 대해 종종        Clear()는 책장에 꽂혀있는 책을 삭제하는 것이고 Abandon()은 책장 자체를 삭제하는 것과 같다고 설명합니다.

- Abandon()은 Session_End 이벤트를 발생시킵니다.

- Clear()는 실행즉시 세션값이 삭제되지만 Abandon()은 garbage collected 가능하도록 릴리즈 합니다.

 

Q2) 쿠키는왜 삭제하나요?

- 세션을 사용하면 웹사이트 접속자의 PC에 정보를 안남길거라 생각하시겠지만 세션ID는 쿠키형태로 저장하게 됩니다.

여러분이 개발한 프로그램이 보안취약점 개선 요청을 받았고, "쿠키를 사용하지 말고 세션을 사용하고 로그아웃시 세션을 날려주세요"라는 레포트를 받았다면 ASP.NET_SessionId 라는 이름에 저장된 세션ID값을 삭제하기 위해 Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", "")); 를 반드시 넣어줘야 합니다.

 

프로젝트의 성공을 기원합니다.