IT

Session.Abandon ()과 Session.Clear ()의 차이점은 무엇입니까?

lottoking 2020. 8. 16. 21:31
반응형

Session.Abandon ()과 Session.Clear ()의 차이점은 무엇입니까?


세션을 파괴하는 것과 그 값을 제거하는 것의 차이점은 무엇입니까? 주시겠습니까?

이 질문을 검색했지만 전체 답변을 안했습니다. 몇 가지 대답은 다음과 가변합니다.

  • Session.Abandon() 세션을 파괴
  • Session.Clear() 모든 값을 제거합니다.

친구가 이렇게.

세션을 지워도 세션이 설정 해제되지는 않지만 사용자 ID는 동일하지만 값은 지워진 상태로 계속 존재합니다.

Abandon은 세션을 완전히 파괴합니다. 즉, 해당 사용자의 세션에 더 많은 값을 저장하기 전에 새 세션을 시작해야합니다.

아래 코드는 작동하며 예외를 발생시킵니다.

Session.Abandon();
Session["tempKey1"] = "tempValue1";

() 사용자 (또는 사용자)가 새 SessionId 세션을 포기합니다.

세션을 테스트 할 때 세션을 중단해도 많은 변화가 없습니다.

난 그냥 한 차이를 해결 : session.Abandon()제기 Session_End이벤트를


지우기 -세션 상태 컬렉션에서 모든 키와 값을 제거합니다.

포기 -세션에 모든 개체를 제거합니다. Abandon 메서드를 명시 적으로 호출하지 서버는 제거 개체를 제거하고 세션 시간이 초과 세션을 삭제합니다.
또한 Session_End 와 같은 이벤트를 발생 수정.

Session.Clear는 선반에서 모든 책제거하는 것과 비교할 수 있지만 Session.Abandon은 전체 선반을 버리는 것과 비슷 합니다.

당신은 말한다 :

세션을 테스트 할 때 세션을 중단해도 많은 변화가 없습니다.

이것은 하나의 요청 내에서 수행하는 동안 수행 합니다 .
다음 요청에서 세션이 달라집니다. 그러나 세션 ID를 하여 ID가 ​​동일하게 유지 될 수 있습니다 .

Session.Clear를 사용하면 많은 요청에서 세션을 사용합니다.

일반적으로 대부분의 경우 Session. Clear를 사용합니다.
사용자가 사이트를 떠날 때라면 Session.Abandon을 사용할 수 있습니다.

따라서 차이점으로 돌아가십시오.

  1. Abandon은 Session_End 요청을 발생하고 있습니다.
  2. 즉시 제거하고 폐기합니다.

  3. Abandon은 리소스를 해제하기 위해 가비지 수집을 수행 할 수있는 SessionState 개체와 해당 항목을 해제합니다. Clear는 SessionState 및 관련 리소스를 유지합니다.

당신은 Abandon()이 세션 일 , 당신 (또는 사용자)은 (다음 주문에서) 새로운 SessionId가 될 것입니다. Clear()세션은, 모든 최신 값이 제거 세션 ID는 그대로 유지됩니다.


이다 모든 위의 다양한 반응에 의해 수단의, 그러나 난이 기사를 읽고 처음으로 나는 내 코드에서 사소한 버그로 이끄는 중요한 사실을 놓친 ...

Session.Clear() 모든 키의 값을 지우지 만 세션 종료 이벤트가 발생하지 않습니다.

Session.Abandon()현재 요청의 값을 지우지 언어로합니다. 해당 페이지에 대한 값이 사라집니다. 그러나 포기하면 이벤트가 발생합니다.

그래서, 내 경우에는 (그리고 아마도 당신에?), I가 필요합니다 Clear()다음 Abandon().


이 코드는 작동하며 예외를 발생시킵니다.

Session.Abandon();  
Session["tempKey1"] = "tempValue1";

Abandon 메서드가 호출 할 때 현재 세션 개체가 삭제 요청에 처리 현재 페이지의 모든 명령이 없습니다. 즉, Abandon 메서드에 대한 호출과 동일한 페이지에서 세션 개체에 많은 변수에 액세스 할 수 있습니다 이후 웹 페이지에는 액세스 할 수 없습니다.

예를 들어, 다음 펼쳐에서 세 번째 줄은 Mary 값을 인쇄합니다. 이는 서버가 펼쳐져 처리를 완료 할 때까지 세션 개체가 파괴되지 않기 때문입니다.

<% 
  Session.Abandon  
  Session("MyName") = "Mary" 
  Reponse.Write(Session("MyName")) 
%>

다음 웹 페이지에서 MyName 변수에 액세스하면 비어 있습니다. 이것은 이전 예제가 포함 된 페이지가 처리를 완료했을 때 이전 Session 개체가 MyName이 삭제 되었기 때문입니다.

에서 MSDN Session.Abandon


세션을 지우면 거기에 추가 할 수 있습니다. 세션을 삭제 한 후에는 새 값을 추가 할 수 없습니다.


clear-its 세션 상태 수집에서 키 또는 값을 제거합니다.

포기-세션에서 세션 개체를 제거하거나 삭제했습니다.


Session.Abandon() 

전체 세션을 파괴 / 종료합니다.

Session.Clear()

세션 데이터 (즉, 현재 세션의 키와 값)를 제거 / 지우지 만 세션은 살아 있습니다.

Session.Abandon () 메소드와 비교하면 Session.Clear ()는 새 세션을 생성하지 않고 세션의 모든 변수를 NULL로 만듭니다.

세션 ID는 브라우저가 닫히지 않는 한 두 경우 모두 동일하게 유지됩니다.

Session.RemoveAll()

세션 상태 컬렉션에서 모든 키와 값을 제거합니다.

Session.Remove()

세션 상태 컬렉션에서 항목을 삭제합니다.

Session.RemoveAt()

세션 상태 컬렉션에서 등급의 항목을 삭제합니다.

Session.TimeOut()

이 속성은 응용 프로그램의 세션 개체에 할당 된 시간 제한 기간을 지정합니다. (시간은 분 단위로 지정됩니다).

사용자가 제한 시간 내에 페이지를 새로 고치거나 요청하지 않으면 세션이 종료됩니다.


sessionid가 존재하면 PCI 준수의 요점 중 하나 인 세션 고정 공격이 발생할 수 있습니다. 세션 ID를 제거하고 세션 고정 공격을 극복하려면이 솔루션을 읽으십시오 . ASP.NET에서 세션 고정 취약점을 피하는 방법은 무엇입니까? .


을 사용 Session.Clear()하는 것보다 사용 하는 것이 편리 할 것이라고 생각합니다 Session.Abandon().

값은 나중에 호출 한 후에도 세션에 여전히 존재하지만 전자를 호출 한 후에 제거되기 때문입니다.


this code works and dont throw any exception:

Session.Abandon();  
Session["tempKey1"] = "tempValue1";

여기서 주목할 점은 Session.Clear는 즉시 항목을 제거하지만 Session.Abandon은 현재 요청이 끝날 때 세션이 중단되도록 표시합니다. 이는 단순히 session.abandon 명령이 실행 된 직후에 코드의 값에 액세스하려고했다고 가정해도 여전히 거기에 있음을 의미합니다. 따라서 session.abandon 명령을 실행하고 즉시 세션에 대한 논리를 수행 한 후에도 코드가 작동하지 않는 경우 혼동하지 마십시오.

참고 URL : https://stackoverflow.com/questions/1470445/what-is-the-difference-between-session-abandon-and-session-clear

반응형