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을 사용할 수 있습니다.
따라서 차이점으로 돌아가십시오.
- Abandon은 Session_End 요청을 발생하고 있습니다.
- 즉시 제거하고 폐기합니다.
- 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이 삭제 되었기 때문입니다.
세션을 지우면 거기에 추가 할 수 있습니다. 세션을 삭제 한 후에는 새 값을 추가 할 수 없습니다.
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 명령을 실행하고 즉시 세션에 대한 논리를 수행 한 후에도 코드가 작동하지 않는 경우 혼동하지 마십시오.
'IT' 카테고리의 다른 글
부모 패딩 무시 (0) | 2020.08.16 |
---|---|
"기본"MIME 유형이 있습니까? (0) | 2020.08.16 |
Docker 컨테이너에서 호스트 데이터베이스에 액세스 (0) | 2020.08.16 |
선언 된 속성에 해당 인스턴스 변수가 필요에? (0) | 2020.08.16 |
함수 인수로서의 함수? (0) | 2020.08.16 |