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

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

이 질문을 검색했지만 전체 답변을 파악하지 못했습니다. 몇 가지 대답은 다음과 같습니다.

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

친구가 이렇게 말했습니다.

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

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

아래 코드는 작동하며 예외를 발생시키지 않습니다.

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

세션을 Abandon ()하면 사용자 (또는 사용자)가 새 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. Clear는 항목을 즉시 제거하고 Abandon은 그렇지 않습니다.
  3. Abandon은 리소스를 해제하기 위해 가비지 수집을 수행 할 수 있도록 SessionState 개체와 해당 항목을 해제합니다. Clear는 SessionState 및 관련 리소스를 유지합니다.

답변

당신 Abandon()이 세션 일 때 , 당신 (또는 오히려 사용자)은 (다음 요청에서) 새로운 SessionId를 얻게 될 것입니다. 때 Clear()세션은, 모든 저장된 값이 제거되지만 세션 ID는 그대로 유지됩니다.


답변

이다 일종의 위의 다양한 반응에 의해 덮여의,하지만 난이 기사를 읽고 처음으로 나는 내 코드에서 사소한 버그로 이끄는 중요한 사실을 놓친 …

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

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

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


답변

이 코드는 작동하며 예외를 발생시키지 않습니다.

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

Abandon 메서드가 호출되면 현재 Session 개체가 삭제 대기열에 있지만 현재 페이지의 모든 스크립트 명령이 처리 될 때까지 실제로 삭제되지 않기 때문입니다. 즉, Abandon 메서드에 대한 호출과 동일한 페이지에서 세션 개체에 저장된 변수에 액세스 할 수 있지만 이후 웹 페이지에는 액세스 할 수 없습니다.

예를 들어, 다음 스크립트에서 세 번째 행은 Mary 값을 인쇄합니다. 이는 서버가 스크립트 처리를 완료 할 때까지 Session 개체가 파괴되지 않기 때문입니다.

<%
  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()

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

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