2014-02-21 1 views
1

저는 일주일 내내이 문제에 매달 렸습니다. 저는 제가 일하는 회사의 보안 정책을 충족시키기 위해이 애플리케이션을 수정해야한다는 사실에 짜증이났습니다. 어쨌든 ...기본 ASP 및 세션 시간 초과 - 세션 타이머를 추적합니까?

기본 ASP 웹 응용 프로그램에서 세션을 추적하려고합니다. 내 gobal.asa 파일의 session_onstart 하위 세션 변수뿐만 아니라 session.timeout을 설정할 수 있습니다. 그것은 잘 작동 :

Sub Session_OnStart 
Session("LoggedOn") = true 
Session.Timeout = 5 
End Sub 

다음, 한 페이지에 (이 문제에 대한 해결책을 테스트하기 위해), 나는 here에서 akiller의 솔루션을 구현했습니다.

session.asp 
<% 
Response.ContentType = "application/json" 
If Session("LoggedOn") = true Then 
Response.Write "{""loggedOn"": true}" 
Else 
Response.Write "{""loggedOn"": false}" 
End If 
%> 

과 : 내가 전에 남은 시간을 확인하는 방법을 알 수 있습니다 무엇을해야하는지 이제

<script type="text/javascript"> 
$(document).ready(function() { 

    var checkLoggedOn = function() { 

     $.getJSON('session.asp', function (data) { 
      if (data.loggedOn = false){ 
       alert(data.loggedOn); 
       //Need to get alert working when session time expires before redirect can be used. 
       //window.location.replace("http://stackoverflow.com"); 
      } 
     }); 
    }; 

    // Call checkLoggedOn every x milliseconds 
    setInterval(checkLoggedOn, 30000); 
}); 
</script> 

나는 같이하는 코드를 수정하는 데 필요한 세션이 만료됩니다. Javascript 코드를 사용하여 클라이언트 측 위와 같은 검사기를 실행할 수 있지만 세션에 남아있는 시간은 서버에서 검사해야합니다 (클라이언트 측 세션의 해킹을 막기 위해).

그래서 여기에 내가 달성하려고하는 마지막 단계가 있습니다.

  1. 트리거하거나 Session.Abandon 세션의 Global.asa에 의해 Session_OnEnd 이벤트 false로 (서버 측)
  2. 세션 설정 ("LoggedOn")는
  3. session.asp가 거짓으로 리턴 만료 결과
  4. 이동해야하는 사용자를 리디렉션합니다.

감사합니다,

+1

그 대답은 당신이 다른 세션 값을 사용하여'DateAdd ("n", Session.Timeout, Now())를 저장하는 솔루션을 제공하는 답을 읽었습니까? 세션이 만료되어야 할 때 정확히 알려줍니다. – Lankymart

답변

3

짧은 답변 : this comment by Lankymart를 참조하십시오.

자세한 답변 : 원하는 것을 할 수 없습니다.

  1. 현재 세션이 살아 때 요청 페이지, ASP는 자동으로이 페이지에 할당 timeout 값 세션 수명을 연장 할 때마다. 이 경우 IIS는 IIS가 다시 시작될 때까지 세션을 유지합니다.

  2. Session_OnEnd의 세션 모음에 값을 설정하면이 이벤트가 완료된 후에 ASP가 모든 세션 수집 개체를 삭제하고 ASP 프로세스에서 SessionID를 제거합니다.

  3. 기억 Session.Abandon를 호출하면 즉시 이벤트 Session_OnEnd를 호출하지 않습니다 : MSDN이 http://msdn.microsoft.com/en-us/library/ms524310(v=vs.90).aspx

+0

나는 그의 업데이트에서 그의 코드를 시험해 보았습니다. 작동하지 않습니다. 원래 코드를 수정해야 제대로 작동합니다. 나는 그의 아이디어 중 일부를 날짜를 사용하여 가져 왔고 수정하여 단지 시간이었습니다. 내 문제는 지금 내 session.asp 파일 에서이 코드입니다 :'(Cint (DateDiff ("s", Session ("LoginExpiration"), Time())))> 0 Then response.write "{" "loggedOn "": true} " Else response.write"{ ""loggedOn "": false} " End If는 1 분 후 항상 false를 반환하고 true를 반환해야합니다 ... 이유를 알 수 없습니다. 아니. – NickD

0

궁극적으로는이 프로젝트를 업그레이드 할 가치가 아니라는 것을 결정하고 우리가 그것을 유지하는거야 참조 내부적으로 만 액세스 할 수있는 도메인에 있으므로 보안 픽스가 필요하지 않습니다.