2010-07-08 12 views
0

this other thread에있는 것과 비슷한 문제에서 실행 중이며 아이디어가 부족하여 도움을 얻을 수 있습니다.(ASP classic) 중단없이 나머지 코드 실행 중지/자바 스크립트 실행

여기에 있습니다 : 세션 변수를 사용하는 ASP 응용 프로그램이 있으며 멀티탭 (IE8)으로 인해 세션 병합을 처리해야합니다.

  1. 내가 클라이언트 측에서 각 브라우저의 탭으로 ID를 (내가 그에 대한 sessionStorage을 사용하고 있습니다) 설정 해요 :

    많은 많은 많은 시도 후, 나는 다음과 같은 구현에 온 것 .

  2. (다른 방법을 찾을 수 없어서) 서버 측에서 사용하려면 쿠키에 저장하고 페이지를 다시로드합니다.

  3. 마지막으로 내 ASP 페이지에서이 ID를 쿠키에서 가져 와서 응용 프로그램의 모든 세션 변수 접두어로 사용하고 있습니다. 여기

이 그런 (모든 ASP 파일의 맨 처음에 삽입) 짧은 예를

자바 스크립트

LoadJs(); 

    // Cookie and TabID handler 
    function LoadJs() 
    { 
     if (getInternetExplorerVersion() <= 6) 
     { 
      //alert("Exit..... old browser version : " + getInternetExplorerVersion()); 
      return; 
     } 

     if (sessionStorage.TabID) 
     { 
      // Check value in cookie 
      var tabIdinCookie = readCookie("tabid"); 

      // if ID in cookie not the same as ID in session update cookie and 
      // refresh the page to update values in server-side 
      if(!tabIdinCookie || (tabIdinCookie && tabIdinCookie != sessionStorage.TabID)) 
      { 
       createCookie("tabid",sessionStorage.TabID); 
       ReloadPage(); 
      } 
     } 
     else 
     { 
      // Create random ID 
      var currentTime = new Date();  
      sessionStorage.TabID = currentTime.getTime(); 
      // Save ID to cookie 
      createCookie("tabid",sessionStorage.TabID); 
      createCookie("usingIE8",true,1); 

      // Refresh the page to make it available from server-side 
      ReloadPage(); 

     } 
     return true; 
    } 

    // Redirect to the same page to refresh data at server-side 
    function ReloadPage() 
    { 
     window.location.reload(true); 
    } 

의, ASP 코드 :

<% 
    Dim Nm 
    Nm="" 


response.Write("<br>Reading from cookie....") 

    if (Request.cookies("usingIE8") <> "")then 
     if (Request.cookies("tabid") = "") then 
      'response.Write("<br>No cookie") 
      'response.flush() 
      ' WHAT TO DO HERE ???? 
     else 
      Response.Write("<br>Cookie FOUND<br>") 
      Nm = Request.cookies("tabid") 
     end if 
    end if 




if (Session(Nm + "LogonTime")="") then 
    Response.Write("<br><b>Updating session</b><br>") 
    Session(Nm + "LogonTime") = Now 
    UpdateInDB(Session(Nm + "LogonTime")) 
    ' Do other stuffs 
end if 

%>


마침내 문제에 대한 해결 방법을 얻게되어 매우 자랑 스럽지만 페이지가 포스트 작업을 수행하면 모든 코드 ASP가 잘못된 접두사 ID로 렌더링되고 실행되었습니다 (데이터베이스 작업 포함).) right before TabID는 쿠키에서 업데이트 할 수 있으며 페이지는 자바 스크립트로 다시로드 할 수 있습니다. 내 모든 페이지 코드가 새로 고침 후 한 번, 한 번 다시 두 번 실행되고 있음을 의미합니다.

다른 사람이 Response.End()와 같은 smthg를 구현하여 ASP의 나머지 부분이 실행되지 않도록 할 수 있다고 생각합니까? 자바 스크립트를 동시에 실행하지 않고 페이지를 새로 고쳐야한다는 것을 식별 할 수 있으면 실행할 수 있습니다. ? 또는 페이지에서 다른 액션을 수행하기 전에 모든 자바 스크립트 실행을 기다리는 중입니까?

나는 여기에서 찔 렸고, 나를 멈추게해야한다. 해결 방법이 있어야합니다 ... 수정 프로그램을 완료 할 수 있다면 적어도 3 ~ 5 년 전에는 ASP.NET으로 업그레이드되지 않는 많은 ASP (3.0) 응용 프로그램에 적용해야합니다. 사전에

감사합니다, 내가

+0

페이지의 ASP 스크립트의 실행 전에 쿠키를 업데이트하는 각 요청을 잡는 것이 가능하다면 나를 행복하게 만들 것 또 다른 접근을하는 데 도움이! :-) .... 누구? – Manotas

+0

그 밖에 할 일이 없다는 것을 의미합니까? ..... : '( – Manotas

답변

0

을 모두 이렇게 이유를 얻을 대신 내가 세션 변수를 설정 아약스를 사용하는 것이 전체 페이지를 다시로드하지? jQuery로 예를 들어 확인

: 세션에 다음

// AJAX Request 
$.post("session.asp", { act: "setSession", varName: "myVar", varValue: "myVal" }, 
    function(data) { 
    alert("new Session value: " + data); 
}); 

.ASP :

if request.form("act") = "setSession" then 
    session(request.form("varName")) = request.form("varValue") 
    ' now you have the new value in Session: 
    ' 
    response.write Session("myVar") 
end if 

희망이

+0

안녕하세요 ulluoink, 답장을 보내 주셔서 감사합니다 .... 흥미로운 접근 방법이 될 수 있지만 필자는 어떻게 그것을 달성 할 수 있을지 전혀 모르겠다 고 고백해야합니다 ... jQuery를 사용하여 이미지를 만들 수 있습니다. 인스턴스,하지만 어떻게 세션 변수를 업데이트 할 수 있습니까? ASP (않습니다 .NET) 세션을 조작 할 수 ... 그것은 가능할 수 있다고 생각합니까? – Manotas