AJAX 폴링이 As를 유지하는 것을 방지하는 방법.활성 상태의 Net 세션
ASP가 있습니다.세션(및 쿠키)에 대해 20분의 슬라이딩 만료가 부여된 순 응용 프로그램입니다.그러나 새로운 정보를 위해 서버를 폴링하는 일부 AJAX가 있습니다.물론 이것의 단점은 세션이 폴링 호출에 의해 활성 상태로 유지되어 만료 시간이 새로 고쳐지기 때문에 무기한으로 계속된다는 것입니다.이를 방지할 수 있는 방법이 있습니까? 즉, 잭스가 아닌 호출에 대해서만 세션을 새로 고칠 수 있도록 허용하는 것입니다.
슬라이딩 만료를 해제하는 것은 비즈니스 사용자들이 전화 통화 사이에 하루의 대부분을 사용하는 애플리케이션이기 때문에 실제로 선택사항은 아닙니다.
이에 대한 다른 스택 오버플로 토론에서는 2개의 개별 응용프로그램(인증된 호출용 하나, 인증되지 않은 호출용 하나)을 유지 관리하는 것에 대해 설명합니다.모든 통화를 인증해야 하기 때문에 이것이 선택사항이 될 수 있을지 모르겠습니다.
아이디어 있어요?
이 질문은 오래되었기 때문에 해결되었거나 해결 방법이 구현되었다고 가정합니다.그러나 AJAX가 서버를 폴링하여 작업을 수행하는 대신 클라이언트가 JQuery를 통해 서버와 통신하거나 서버가 클라이언트에게 알릴 수 있는 SignalR을 사용했습니다.
확인해 보십시오. ASP에 대해 알아보십시오.NET 신호 R
폴링을 위해 참조하는 컨트롤러 작업에 아래 코드를 추가합니다.모든 곳에서 사용할 수 있도록 속성으로 변환합니다.이 라인은 세션 제한 시간을 연장하지 않습니다.
[HttpPost]
public ActionResult Run()
{
Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
return Json("");
}
아약스가 세션과 쿠키를 유지하는 것을 막을 방법은 없습니다!
하지만, 여러분이 하고 싶은 것을 성취할 수 있는 방법이 있습니다.그것은 제가 설명할 과정이 당신에게 괜찮을지 여부입니다.
저는 당신이 정말로 이루고 싶은 것은 우선 Ajax로 페이지를 새로 고쳐 일부 프로세스가 활성화되고 실행되도록 하는 것이라고 생각합니다.또한 사용자가 프로그램 작동을 중지한 경우에도 확인할 수 있습니다.
만약 당신이 원하는 것이라면, 이것을 달성하기 위한 간단한 프로세스가 있습니다.
- 실행할 대상에 대해 Ajax가 실행됩니다.
- 사용자가 페이지에서 작업을 중지했는지 확인할 세션을 제거하고 대신 세션을 변수로 관리합니다.
- 변수는 글로벌 변수이거나 사용자가 페이지에서 요소를 클릭할 때마다 초기값으로 설정되는 클래스 변수일 수 있습니다.(요소의 클릭 이벤트를 선택하고 변수를 초기값으로 설정합니다.)
- 주어진 시간마다 변수를 증분합니다(Ajax가 실행될 때마다 반복).
- 또한 변수가 한계로 설정한 값보다 큰 경우 함수/메소드를 실행하여 해당 변수의 값을 확인합니다.이 작업은 Ajax가 실행될 때마다 또는 실행할 때마다 실행될 수 있습니다(시간 지정 이벤트).
- 변수 값이 설정된 제한 값보다 크면 세션/로그 사용자를 비활성화하거나 지워야 합니다.
이렇게 하면 사용자가 실행 중인 페이지에서 시스템 작동을 중지(클릭 요소)하면 결국 현재 사용자가 로그아웃되고 프로그램 실행이 중지됩니다.
i-Frame에 숨겨진 페이지를 만들어 보았습니다.그런 다음 JavaScript를 사용하여 세션을 활성화하기 위해 18분마다 게시합니다.이거 진짜 잘 되네요.
이 예는 ASP에서 가져온 것입니다.NET Forms 프로젝트이지만 MVC용으로 조정할 수 있습니다.
KeepSession 페이지 만들기활성 페이지 및 메타 새로 고침 태그 추가
metaid="MetaRefresh" http-equiv="meta" content="21600;url=KeepSessionAlive.aspx"
뒤에 있는 코드에서
string WindowStatusText = " "; 윈도우 상태 텍스트 = ";protected void Page_Load(object sender, EventArgs e) { //string RefreshValue = Convert.ToString((Session.Timeout * 60) - 60); string RefreshValue = Convert.ToString((Session.Timeout * 60) - 90); // Refresh this page 60 seconds before session timeout, effectively resetting the session timeout counter. MetaRefresh.Attributes["content"] = RefreshValue + ";url=KeepSessionAlive.aspx?q=" + DateTime.Now.Ticks; WindowStatusText = "Last refresh " + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString(); }
마스터 페이지에서 숨겨진 iFrame 추가
iframe ID="KeepAliveFrame" src="KeepSession"Alive.aspx" frameBorder="0" 너비="0" 높이="0"
언급URL : https://stackoverflow.com/questions/26488980/how-to-prevent-ajax-polling-keeping-asp-net-sessions-alive
'programing' 카테고리의 다른 글
Android에서 배경이 투명한 대화 상자 (0) | 2023.08.24 |
---|---|
데이터베이스에서 JPA를 사용하여 쉼표로 구분된 값을 얻는 방법 (0) | 2023.08.24 |
PIL을 사용하여 이미지 파일 크기를 줄이는 방법 (0) | 2023.08.24 |
주피터 노트북을 신뢰할 수 없습니다. (0) | 2023.08.24 |
스위프트에서 @objc를 언제 사용해야 합니까? (0) | 2023.08.24 |