2009-04-13 5 views
1

우리는 웹 페이지를 개발하는 동안 우리의 작업 절차를 따르고 있습니다. 하나 이상의 세션 변수에 페이지를 바인드하는 것입니다.이 세션 변수는 현재 페이지를 닫는 동안 페이지를 닫는 동안 현재 처리 객체를 보유하기 위해 사용됩니다. 그들.웹 페이지를 닫을 때 세션 변수를 버리는 방법은 무엇입니까?

페이지를 닫는 동안 어떻게 이러한 세션 변수를 삭제할 수 있습니까? 그 기술에 관한 제안이나 그 문제를 해결하는 방법은 무엇입니까?

답변

4

이 페이지가 남아있는 경우에 발생에는 서버 측 이벤트가 없습니다/닫거나 세션이 만료되면 해고 될 것입니다. 또한 Session_End 이벤트 (다른 ​​답변에서 언급)는 페이지가 남아있을 때 호출되지 않습니다. 사용자가 동일한 웹 응용 프로그램의 다른 페이지로 이동할 수 있으므로 세션이 계속 존재할 수 있기 때문입니다. 나는이 문제를 해결 (또는 주위 작업)하는 3 가지 방법의

을 생각할 수 있습니다 :

1이 - 페이지 범위와 데이터를 저장하는 의 ViewState를 사용합니다. 이것이 ViewState의 목적입니다. 많은 양의 데이터가 없으면 문제가되지 않습니다. 많은 양의 데이터가있는 경우, 요청이있을 때마다 직렬화/역 직렬화되어 클라이언트/서버로 전송되므로 요청이 많아 성능이 좋지 않을 수 있습니다.

2

- 대신 세션에 데이터를 넣는 (낮은 슬라이딩 만료 타임 아웃)를 캐시에 넣어. 귀하의 페이지에서 세션과 동일한 방식으로 데이터에 액세스 할 수 있습니다. 즉, data = Cache [ "data"], 데이터가 캐시에서 제거되었다는 것을 준비해야합니다 (다시로드해야합니다. 다시 예를 들어 DB에서), 두 요청 사이의 시간이 만료 시간보다 클 경우.

3 - 클라이언트 측 (자바 스크립트)을 사용 으로 onUnload 이벤트, 세션에서 데이터를 제거하기 위해 어떤 행동 (예를 들어, AJAX 콜백)를 발생시킨다. 하지만 onUnload 이벤트는 신뢰할 수 없다고 생각합니다 (예 : 브라우저가 충돌 또는 작업 관리자로 종료되거나 자바 스크립트가 사용 중지 된 경우 등).

+0

ViewState의 경우 때때로 처리 객체가 데이터와 세부 정보 데이터를 보유하기 때문에 데이터가 많이 있습니다. 캐시를 위해 viewstate 또는 세션에 대한 성능에 대해 잘 모릅니다. 언로드 이벤트의 경우 무엇이 의심 스럽습니까? – Ahmed

+0

onUnload가 일치하지 않아 브라우저가 다운되거나 브라우저가 종료 될 경우 실행되지 않을 수 있습니다. 그게 우리가 최근 프로젝트에서 사용한 해결책이라고 말했다. 내가 –

+0

위의 "force shutdown"을 읽었을 때 "브라우저 종료"를 읽었다. –

0

해당 페이지에만 변수를 사용하는 경우 viewstate에 변수를 저장하십시오. ViewState는 페이지 범위 변수에 적합합니다.

-1

아마도 ASP.NET 세션을 사용하고 있다면, 당신은 당신의 soluting에 global.asax 파일을 추가 할 수 있습니다. 거기에이 이벤트 위임을 찾을 수 있습니다 (생성하지 않을 경우) :

protected void Session_End(object sender, EventArgs e) 
{ 

} 

.. 여기서 세션 컬렉션을 지울 수 있습니다.

protected void Session_End(object sender, EventArgs e) 
    { 
     Session.Clear(); 
    } 

는 사용자가 클릭 로그 아웃 할 때 :

+0

세션이 만료되거나 사용자가 로그 아웃을 클릭하면 해고 될 것입니다. 페이지 닫기/닫기 중에 이러한 세션 분실을 구분해야합니까? – Ahmed

+0

오해에 대한 나쁘다 :) 마틴의 대답을 봐야한다. 그러나 클라이언트가 페이지를 닫을 때 (또는 다른 서버를 탐색 할 때) 서버에 의존 할 수는 없다. 이 문제의 근본은 ( – cwap

관련 문제