세션을 유지하는 방법: 어떤 사람들은 session.timeout=-1 또는 0보다 작은 숫자를 설정하라고 합니다. 이 방법은 절대 불가능합니다. 세션 계산 시간은 분 단위이며 1보다 크거나 같은 정수여야 합니다. 다른 사람이 session.timeout=99999로 설정하라고 하더군요. 이 방법도 작동하지 않습니다. 세션에는 최대 시간 제한이 있습니다. 테스트 결과 최대값은 24시간이라는 것을 알았습니다. 즉, 가질 수 있는 최대값은 session.timeout=1440이고 1441은 허용되지 않는다는 뜻입니다. 하하. 내 테스트 환경: win2003+IIS6.0+ASP3.0.
따라서 session.timeout의 만료 시간을 설정하여 세션이 만료되지 않도록 하는 것은 불가능합니다. 쿠키에 작성하는 것이 더 좋은 방법입니다. 인터넷에는 그러한 튜토리얼이 많기 때문에 여기서는 다루지 않겠습니다. 또 다른 방법은 세션이 유지될 페이지에 숨겨진 iframe을 설정하는 것입니다. 가끔씩(이 시간은 session.timeout 시간보다 작습니다) 프레임의 빈 페이지를 새로 고치십시오. 구현 방법은 다음과 같습니다.
보관하려는 세션 페이지에 다음을 추가합니다.
다음과 같이 코드 코드를 복사합니다.
<iframe 너비=0 높이=0 src=/blog/SessionKeeper.asp></iframe>
동일한 디렉터리에 SessionKeeper.asp 파일을 만듭니다. XML/HTML코드 복사
다음과 같이 코드 코드를 복사합니다.
<html>
<머리>
<meta http-equiv=새로 고침 콘텐츠=900000;url=sessionKeeper.asp>
<!--서버와 통신하고 세션이 손실되지 않도록 하려면 900초마다 새로 고침하세요-->
</head>
</html>
이 방법은 비교적 일반적이며, 위와 유사한 또 다른 방법이 있지만 중첩된 iframe을 자동으로 새로 고치기 위해 메타를 사용하지 않습니다. 그는 javascript:window.setTimeout(functionname(),10000);을 사용하여 일정 간격으로 자동으로 함수를 호출합니다. 물론 함수는 여전히 빈 파일에 연결되어야 합니다. 구체적인 방법은 다음과 같습니다.
추가: 유지 관리할 세션에 JavaScript 복사 코드
다음과 같이 코드 코드를 복사합니다.
<script id=뒤 언어=javascript></script>
<스크립트 언어=자바스크립트>
함수 keepsession(){
document.all[뒤로].src=/blog/SessionKeeper.asp?RandStr=+Math.random();
//여기서 RandStr=Math.random은 동일한 주소의 새로 고침이 무효화되는 것을 방지하기 위해 back.src의 값을 매번 다르게 만드는 것입니다.
window.setTimeout(keepsession(),900000); //900초마다 자신을 호출합니다.
}
keepsession();
</script>이런 방법으로 동일한 디렉터리에 빈 내용이 포함된 sessionKeeper.asp 파일을 생성하면 됩니다!
문제가 해결되지 않음: 위의 방법을 통해 세션을 유지하는 데 문제가 없어야 합니다. 요청 없이 세션을 지우는 IIS의 기본값은 20분입니다. 각 대화형 서비스에 대해 설정한 시간은 이 값보다 훨씬 적습니다. 그런데 시간이 많이 지나도 아무 이유 없이 세션이 사라지는 데는 하루 정도 걸립니다. 우울한.
나중에 인터넷에서 여러 곳을 검색한 결과 마침내 답을 찾았습니다. 알고 보니 IIS에는 서버를 보호하기 위해 재활용 개념이 있다는 것이 밝혀졌습니다! 오랜 시간 테스트 끝에 드디어 대략적인 이해가 되었습니다. (웃기지 마세요^-^) 먼저 이 재활용이 어디에 설치되어 있는지 살펴보겠습니다.
IIS 관리자 시작->응용 프로그램 풀->마우스 오른쪽 버튼 클릭->속성->재활용 탭 기본적으로 작동하는 항목이 하나 있습니다. 첫 번째 항목은 작업 프로세스 재활용(분)입니다. 기본값은 약 1740분입니다. 29시간. 그 말은 무슨 뜻인가요? 내 개인적인 이해: 진행 중인 모든 세션은 session.timeout 후 1740분 후에 자동으로 지워집니다. 이 값은 최대 4,000,000까지 설정할 수 있으며, 이는 약 2,700일 이상입니다! 그 사람이 자동으로 재활용하지 않고 직접 취소했어요! 문제가 마침내 해결되었습니다.
또한 이 속성 대화 상자에는 다음과 같은 몇 가지 다른 항목이 있습니다.
두 번째 항목은 연결된 사용자 수가 일정 수를 초과하면 재활용되어야 합니다.
세 번째 항목은 특정 시간에 자동으로 재활용하는 것입니다.
성능 탭에서 이 기간 동안 유휴 상태가 된 후 작업자 프로세스를 종료합니다. 여기에서 IIS 기본 session.timeout 시간이 설정됩니다. 기본값은 20분입니다. 여기서 최대값은 4000000으로 설정할 수도 있습니다. 이는 ASP 페이지에서 session.timeout의 최대값을 1440으로 설정하는 것과 다릅니다. 여기서 1440보다 큰 값을 설정하는 것이 가능할지는 테스트하지 않았습니다. 그렇다면 ASP 페이지에서는 session.timeout의 최대값이 1440에 불과한데 IIS 속성에서는 그렇게 크게 설정할 수 있는 이유는 무엇입니까? 이는 보호 메커니즘이어야 합니다. ASP 페이지에서는 모든 사용자가 session.timeout 값을 설정할 수 있지만 IIS에서는 관리자만 설정할 수 있습니다. 두 사용자는 서로 다른 권한을 가지므로 설정 범위가 다릅니다.