>백엔드 개발 >C#.Net 튜토리얼 >Asp.net에서 안전하게 종료할 때 세션 또는 쿠키를 지우는 예제 코드

Asp.net에서 안전하게 종료할 때 세션 또는 쿠키를 지우는 예제 코드

高洛峰
高洛峰원래의
2016-12-10 09:13:261789검색

개요:

로그아웃하려면 클릭하세요. 로그인/종료 페이지로만 리디렉션되는 경우 홈페이지 등 브라우저 주소 표시줄에 로그인 후 페이지 주소를 입력하세요. 액세스하기 위해 로그인할 필요가 없다는 것을 알게 될 것입니다. 소위 출구는 안전하지 않습니다.

그럼 어떻게 안전하게 하차하나요?

종료를 클릭한 후 해당 세션이나 쿠키를 삭제하는 것입니다.

세션을 지우는 코드:

Session.Clear();
Session.Abandon();

쿠키를 지우는 올바른 코드(쿠키 이름이 UserInfo라고 가정):

if (Request.Cookies["UserInfo"] != null)
{
Response.Cookies["UserInfo"].Expires = DateTime.Now.AddDays(-1);
}

모든 쿠키를 삭제해야 하는 경우 다음을 트래버스하세요.

for (int i = 0; i <Response.Cookies.Count; i++)
{
Response.Cookies[i].Expires = DateTime.Now.AddDays(-1);
}

쿠키 ​​삭제 오류 코드(쿠키 이름이 UserInfo라고 가정):

if (Request.Cookies["UserInfo"] != null)
{
Response.Cookies.Remove("UserInfo");
}

이 처리 후에도 쿠키가 여전히 존재하는데 왜 그럴 수 없는지 알 수 있습니다. 삭제될까? .NET의 HttpCookieCollection 구현 소스 코드를 살펴보겠습니다.

public void Remove(string name)
{
if (this._response != null)
{
this._response.BeforeCookieCollectionChange();
}
this.RemoveCookie(name);
if (this._response != null)
{
this._response.OnCookieCollectionChange();
}
}

이 작업은 서버가 데이터를 전송할 때 HttpCookieCollection 컬렉션에서 쿠키를 삭제합니다. 클라이언트 서버가 전송되면 서버 측에서 삭제된 쿠키에 대한 정보가 포함되지 않으며 브라우저는 이를 변경하지 않습니다. (제거 메소드는 서버가 삭제된 쿠키를 클라이언트로 보내는 것을 방지할 뿐입니다.) 이 쿠키를 사용하면 클라이언트 컴퓨터에 남아 있는지 여부는 중요하지 않습니다. 따라서 쿠키를 삭제할 수 없는 상황이 발생합니다.

Response.Cookies.Remove는 필요한 효과를 얻을 수 없는데 왜 Microsoft는 이를 계속 유지합니까? CookieCollection은 ICollection 인터페이스를 구현하기 때문에 romove는 실용적인 가치는 거의 없지만 구현해야 하는 메서드입니다. 컬렉션 romove도 이런 식으로 구현해야 하는데, 마이크로소프트가 MSDN을 작성할 때 설명이 너무 불분명해서 우리가 많은 어려움을 겪었습니다.

다음은 안전한 종료를 위한 여러 가지 방법을 요약한 것입니다.

1) 링크 버튼 및 버튼과 같은 서버 컨트롤을 사용하여 종료합니다.

이 방법이 가장 좋습니다: 직접 서버 컨트롤에 해당하는 이벤트에서 세션이나 쿠키를 지우는 코드를 작성하면 됩니다.

2) 3499910bf9dac5ae3c52d5ede7383485Logout5db79b134e9f6b82c0b36e0489ee08ed와 같은 HTML 태그를 사용하여 종료하세요.

특수 태그 3499910bf9dac5ae3c52d5ede73834855db79b134e9f6b82c0b36e0489ee08ed의 경우 다음과 같이 구현할 수 있습니다. 이: < ;a href="logout.aspx">Logout5db79b134e9f6b82c0b36e0489ee08ed logout.aspx의 Page_Load 이벤트에서 세션 또는 쿠키를 지우는 코드를 작성하면 됩니다.

3499910bf9dac5ae3c52d5ede73834855db79b134e9f6b82c0b36e0489ee08ed와 같은 HTML 태그의 경우 HTML 태그의 해당 클라이언트 이벤트에서 Js-Ajax 또는 jQuery-Ajax를 사용하여 일반 핸들러(.ashx)에서 지우기를 작성할 수 있습니다. ) 세션 또는 쿠키 코드로 충분합니다.

3499910bf9dac5ae3c52d5ede73834855db79b134e9f6b82c0b36e0489ee08ed와 같은 HTML 태그의 경우 현재 페이지에 Button과 같은 서버 컨트롤을 추가하고 div에 포함시킨 후 숨길 수도 있습니다(참고 : 숨기기는 표시되지 않으며 표시될 수 없습니다. div의 display:none을 설정해야만 달성할 수 있는 Visible=False를 통해 버튼의 서버 이벤트에서 세션 또는 쿠키를 지우는 코드를 작성합니다. HTML 마크의 해당 클라이언트 이벤트에서 Js 또는 jQuery로 호출합니다. Button 컨트롤의 Click 이벤트로 충분합니다(서버 속성 Visible=False를 설정하여 Button을 숨기고 JS에서 호출한 Button 컨트롤의 Click 이벤트 또는 jQuery는 유효하지 않습니다).


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.