문제

클래식 ASP 사이트가 있는데, 일정에 따라 일부 데이터베이스 테이블을 세션 데이터에서 비워야합니다. 이 시스템은 예정된 작업에 액세스 할 수 없습니다 (공유 웹 호스트 및 MySQL 서버 사용).

나는 사용을 고려하고 있었다 global.asa, 이와 같은 이벤트를 발사하기 위해 :

  1. Application_OnStart - 데이터베이스에서 모든 세션 데이터를 삭제합니다
  2. Application_OnEnd - 모든 세션 데이터를 삭제합니다
  3. Session_OnStart - 사용자 '세션을 만듭니다
  4. Session_OnEnd -이 세션과 관련된 모든 세션 데이터를 삭제하십시오.

데이터베이스 연결을 작성해서는 안되는 이유가 있습니까? global.asa? 이들은 세션이나 응용 프로그램 범위에서 공유되지 않은 여기에서 만들어지고 파괴 될 것입니다. 사용자 당 이러한 관리자 작업을 사용자 당 두 번 실행하는 방법 (세션 시작 및 종료시)을 데이터베이스 트래픽과 동일시하기 위해 다시 해고되지 않습니다.

왜 이것이 나쁜지에 대한 아이디어가 있습니까? 데이터베이스에 연결하지 않는 이유 global.asa?

누군가 위의 아이디어가 나쁜 것이라고 생각한다면 - 하나 이상의 아이디어가없는 방법에 대한 다른 생각이 있습니까?

  1. 예정된 작업
  2. 데이터베이스 예약 작업
  3. 모든 페이지에 대한 페이지로드에서 코드를 실행합니다 (따라서 Session_OnStart 후크)

고마워'

선임 코코넛

도움이 되었습니까?

해결책

싱글 세션을 위해 정리 할 것입니다 Session_OnEnd 그리고 모든 세션을 위해 Application_OnStart. 모든 세션 청소가 느리면 XMLHTTP 클래스를 사용하는 데 HTTP- 요청을 만드는 별도의 ASP 파일로 추악한 일을 할 수 있습니다. 요청이 완료 될 때까지 기다리지 말아야합니다. 모든 코드가 시작되기 전에 제공되기 시작하지 않습니다 Application_OnStart 실행됩니다.

다른 팁

세션 테이블을 비우는 웹 페이지를 작성하고 예약 된 작업을 통해 외부 상자에서 해당 페이지를 호출 할 수 있습니다.

정리 작업이 얼마나 오래 걸릴 지에 따라 다릅니다. Application_start가 실행중인 동안 요청이 제공되지 않으므로 잠시 차단할 수 있습니다.

또한 모든 경우에 Application_end (또는 Session_end)가 호출 될 것이라는 보장이 없습니다 (서버가 종료 될 때 해고되지 않거나 일부 치명적인 실패가 이러한 이벤트를 완전히 우회 할 수 있음).

가장 좋은 방법은 제안한 것처럼 오래된 세션 데이터 정리를 담당하는 예정된 작업을 실행하는 것입니다.

일관된 트래픽이있는 경우 요청주기가 끝날 때 작은 작업을 피기 백 할 수 있습니다. 응답을 발행 한 다음 DB 쿼리를 실행하십시오. 물론 자신의 스케줄러를 작성해야합니다. 또 다른 옵션은 요청 시작시 서버 사이드, 비동기, xmlhttpreq를 사용하여 핑하는 별도의 ASP 파일 (Tasklet)을 만드는 것입니다. 이렇게하면 클라이언트 요청 사이클에서 정리 코드를 유지하고 대기 시간을 줄입니다.

실제로 일정에 따라 레거시 작업 레드/웹 후크를 핑할 수있는 영리한 Appengine 기반 WebApp/API가 없다면 실제로 나는 놀라지 않습니다. 그리고 그렇지 않다면, 당신은 당신의 자아를 쓸 수 있습니다. 옵션은 끝이 없습니다 :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top