문제

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

이 질문을 검색했지만 총 대답을 파악하지 마십시오. 일부 답변은 다음과 같습니다.

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

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

세션을 지우는 것은 세션을 설정하지 않으며, 여전히 사용자와 동일한 ID로 존재하지만 값이 간단하게 지워집니다.

포기는 세션을 완전히 파괴 할 것이므로 해당 사용자의 세션에 더 이상 값을 저장하기 전에 새 세션을 시작해야합니다.

아래 코드는 작동하며 예외를 던지지 않습니다.

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

세션을 포기할 때, 당신 (또는 오히려 사용자)은 새로운 sessionID를 얻게됩니다.

세션을 테스트 할 때 세션을 포기할 때는 아무런 변화가 없습니다.

한 가지 차이점을 찾습니다.session.Abandon() 제기 Session_End 이벤트

도움이 되었습니까?

해결책

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

버리다 - 세션에 저장된 모든 객체를 제거합니다. 포기 방법을 명시 적으로 호출하지 않으면 서버는 이러한 객체를 제거하고 세션이 시간이 초과되면 세션을 파괴합니다.
또한 이벤트도 제기합니다 Session_end.

세션. 기복을 비교할 수 있습니다 선반에서 모든 책을 제거합니다, session.abandon은 더 비슷합니다 선반 전체를 버리십시오.

당신은 말합니다 :

세션을 테스트 할 때 세션을 포기할 때는 아무런 변화가 없습니다.

이것은 당신이 그것을하는 동안 맞습니다 하나의 요청 만 내에.
다음 요청에서 세션은 다릅니다. 하지만 세션 ID를 재사용 할 수 있습니다 신분증이 동일하게 유지되도록합니다.

세션을 사용하는 경우 많은 요청에서 동일한 세션이 있습니다.

일반적으로 대부분의 경우 세션을 사용해야합니다.
사용자가 사이트를 떠날 것이라고 확신하는 경우 Session.Abandon을 사용할 수 있습니다.

차이점으로 돌아 가기 :

  1. 포기 Session_end 요청을 인상합니다.
  2. 명확한 품목을 면밀히 제거하면 포기하지 않습니다.
  3. 포기는 세션 스테이트 객체와 해당 항목을 공개하여 수집 된 쓰레기가 자원을 풀어주기 위해 수집 할 수 있습니다. Clear는 SessionState 및 Resources와 관련하여 유지됩니다.

다른 팁

때를 Abandon() 세션, 귀하 (또는 사용자)는 새로운 SessionID (다음 요청에서)를받습니다. 때를 Clear() 세션, 모든 저장된 값이 제거되지만 SessionID는 그대로 유지됩니다.

이것은 종류 위의 다양한 응답으로 다루었지만이 기사를 처음 읽을 때 중요한 사실을 놓쳤으며, 이는 내 코드에서 사소한 버그를 초래했습니다 ...

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

Session.Abandon() 현재 요청의 값을 지우지 않습니다. 다른 페이지가 요청되면 해당 페이지의 값이 사라집니다. 그러나 포기는 이벤트를 던질 것입니다.

그래서 내 경우 (그리고 아마도 당신의 경우) Clear() 그 뒤에 Abandon().

이 코드는 작동하며 예외를 던지지 않습니다.

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

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

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

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

후속 웹 페이지의 변수 myName에 액세스하면 비어 있습니다. 이전 예제가 포함 된 페이지가 처리 된 페이지가 완료된 경우 이전 세션 객체로 MyName이 파괴 되었기 때문입니다.

~에서 MSDN 세션. Abandon

세션을 지우면 저장된 값이 제거되지만 여전히 새 값을 추가 할 수 있습니다. 세션을 파괴 한 후 새 값을 추가 할 수 없습니다.

Clear-Its Session State Collection에서 키 또는 값을 제거합니다 ..

포기중인 세션에서 세션 객체를 제거하거나 삭제했습니다 ..

Session.Abandon() 

전체 세션을 파괴/죽일 것입니다.

Session.Clear()

세션 데이터를 제거/지우십시오 (예 : 현재 세션의 키와 값).

session.abandon () 메소드, session.clear ()와 비교하여 새 세션을 생성하지 않으며 세션의 모든 변수를 NULL로 만듭니다.

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

Session.RemoveAll()

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

Session.Remove()

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

Session.RemoveAt()

세션 상태 컬렉션에서 지정된 색인에서 항목을 삭제합니다.

Session.TimeOut()

이 속성은 응용 프로그램의 세션 객체에 할당 된 타임 아웃 기간을 지정합니다. (시간은 몇 분 안에 지정됩니다).

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

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

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

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

this code works and dont throw any exception:

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

여기에 주목해야 할 한 가지. 그것은 단순히 세션 직후 코드에서 값에 액세스하려고했다고 가정 해 봅시다. Abandon 명령이 실행되면 여전히 존재합니다. 따라서 세션을 발행 한 후에도 코드가 작동하지 않는 경우 혼란스러워하지 마십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top