session.abandon ()과 session.clear ()의 차이점은 무엇입니까?
-
16-09-2019 - |
문제
세션을 파괴하는 것과 그 가치 제거의 차이점은 무엇입니까? 이것을 보여주는 예를 제공 해 주시겠습니까?
이 질문을 검색했지만 총 대답을 파악하지 마십시오. 일부 답변은 다음과 같습니다.
Session.Abandon()
세션을 파괴합니다Session.Clear()
모든 값을 제거합니다
친구가 나에게 이렇게 말했습니다.
세션을 지우는 것은 세션을 설정하지 않으며, 여전히 사용자와 동일한 ID로 존재하지만 값이 간단하게 지워집니다.
포기는 세션을 완전히 파괴 할 것이므로 해당 사용자의 세션에 더 이상 값을 저장하기 전에 새 세션을 시작해야합니다.
아래 코드는 작동하며 예외를 던지지 않습니다.
Session.Abandon();
Session["tempKey1"] = "tempValue1";
세션을 포기할 때, 당신 (또는 오히려 사용자)은 새로운 sessionID를 얻게됩니다.
세션을 테스트 할 때 세션을 포기할 때는 아무런 변화가 없습니다.
한 가지 차이점을 찾습니다.session.Abandon()
제기 Session_End
이벤트
해결책
분명한 - 세션 상태 컬렉션에서 모든 키와 값을 제거합니다.
버리다 - 세션에 저장된 모든 객체를 제거합니다. 포기 방법을 명시 적으로 호출하지 않으면 서버는 이러한 객체를 제거하고 세션이 시간이 초과되면 세션을 파괴합니다.
또한 이벤트도 제기합니다 Session_end.
세션. 기복을 비교할 수 있습니다 선반에서 모든 책을 제거합니다, session.abandon은 더 비슷합니다 선반 전체를 버리십시오.
당신은 말합니다 :
세션을 테스트 할 때 세션을 포기할 때는 아무런 변화가 없습니다.
이것은 당신이 그것을하는 동안 맞습니다 하나의 요청 만 내에.
다음 요청에서 세션은 다릅니다. 하지만 세션 ID를 재사용 할 수 있습니다 신분증이 동일하게 유지되도록합니다.
세션을 사용하는 경우 많은 요청에서 동일한 세션이 있습니다.
일반적으로 대부분의 경우 세션을 사용해야합니다.
사용자가 사이트를 떠날 것이라고 확신하는 경우 Session.Abandon을 사용할 수 있습니다.
차이점으로 돌아 가기 :
- 포기 Session_end 요청을 인상합니다.
- 명확한 품목을 면밀히 제거하면 포기하지 않습니다.
- 포기는 세션 스테이트 객체와 해당 항목을 공개하여 수집 된 쓰레기가 자원을 풀어주기 위해 수집 할 수 있습니다. 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 명령이 실행되면 여전히 존재합니다. 따라서 세션을 발행 한 후에도 코드가 작동하지 않는 경우 혼란스러워하지 마십시오.