Session_End를 잘못 사용하고 있습니까?Session_End가 세션 중간에 여러 번 호출되었습니다.
내 응용 프로그램에서 페이지로드 속도를 높이기 위해 캐시가 있는데, 꽤 잘 작동합니다. 최근에 누군가가 나에게 결코 메모리를 비우지 않고 메모리를 낭비하고 있으며 Session_End에 해당 세션 ID와 관련된 캐시 항목을 지우는 메소드를 구현할 것을 제안했습니다.
때때로 비정상적인 행동을보기 시작했는데. 페이지를로드 할 때 매우 드물게 비어있는 페이지가 표시되어 해당 페이지의 캐시가 비어 있기 때문에 예외가 표시됩니다. 캐시 액세스와 session_end 메소드에 디버거 중단 점을 두었습니다. 다음 번에 디버거 중단 지점을 잡으려고합니다.
다음에 일어난 일이 실제로 일어난 일에 상당히 놀랐습니다. 내 브라우저는 열어 두었지만 오랜 시간 동안 유휴 상태 였기 때문에 세션 쿠키가 오래되었다고 생각합니다. 페이지의 사본을 캐시에 저장하는 페이지 서버를 공격합니다. 페이지가로드되는 동안 Session_End가 즉시 호출되어 캐시에서 삭제됩니다. 브라우저를 새로 고침하면 Session_End가 계속 호출되어 가난한 브라우저가 계속 요청하는 세션을 닫으려고 시도합니다.
그래서 난 내 실제 질문은 가정 :
- 없는 이유는 기존의 하나가 IIS에 그 anathemic 경우 새로운 세션 쿠키를 받고 브라우저?
- Session_End는 이러한 방식으로 사용하도록 설계되지 않았습니까?
- 내가하려는 일을하는 더 좋은 방법이 있습니까?
@Sosh - 내 global.asax.cs :
protected void Session_End(Object sender, EventArgs e)
{
//clean up object cache on session expiry
string sessionID = this.Session.SessionID;
foreach (string key in Global.DataGroups.Keys)
{
if (key.EndsWith(sessionID))
{
Global.DataGroups.Remove(key);
}
}
}
global.asax를 볼 수 있습니까? – UpTheCreek