2017-12-11 17 views
1

기존 시스템에서 새 앱을 만들었습니다. 내 응용 프로그램의 기능 중 하나는 잠금 프로세스가 필요했습니다. 사용자가 레코드를 선택하면 현재 시스템에 로그인되어있는 다른 모든 사용자의 옵션/단추 편집을 비활성화해야합니다. 나는 사용자가 onClick을 활성화 할 수있는 기능을 가지고 있으며 (버튼 잠금 해제시) 또는 사용자가 로그 오프하면. 이 함수는 레코드에서 사용자를 제거합니다. 이 모든 것은 잘 작동하며 어떤 문제도 경험하지 못했습니다.사용자가 아직 로그인되어 있는지 확인하는 방법은 무엇입니까? Coldfusion 9/10

몇 가지 기록이 하루 이상 잠겨 있음을 발견 한 후. 그래서 이것은 몇 가지 문제를 일으켰습니다. 디버깅을 시도하고 내 응용 프로그램에서 문제를 탐지하려고했습니다. 내가 생각하기에 일부 사용자는 시스템을 로그 오프하지 않고 단순히 브라우저를 닫을뿐입니다. 이 상황에서 레코드 제거를 처리해야하는 함수는 절대로 트리거되지 않습니다. 이 문제를 어떻게 해결할 수 있을지 궁금합니다.

사용자가 더 이상 사용하지 않는지 확인할 수있는 방법이 있습니까? 가능한 해결책 중 하나는 예를 들어 매 5 분마다 ajax 호출을 보내는 것입니다. 이 호출이 false를 반환하면 잠금을 제거합니다. 나는 아직도 아약스 전화를 어디서 보낼지 잘 모르겠다. 해야 Application.cfc 또는 다른 곳으로 보내야합니까? 누군가가 나에게 몇 가지 예를 보여 주거나 도움이 될 것이라고 조언 할 수 있다면.

또한 내 앱의 Application.cfc 페이지를 설정하려고했지만 내 앱 페이지의 링크를 클릭하면 빈 페이지로 돌아갑니다. 다음은 내가 가지고있는 예입니다.

<cfcomponent output="false" extends="Map.Application" hint="Secondary application event handler"> 
    <cffunction name="onRequeststart" access="public" returntype="boolean" output="false" 
     hint="Handles pre-page processing for each request."> 
     <cfargument name="thePage" type="string" required="true" hint="I am the template requested by the user."/>     

     <!--- This application.cfc is extending the root Application.cfc ---> 
     <cfif SUPER.OnRequestStart(ARGUMENTS.thePage)> 
      <cfset REQUEST.AppName = "myApp"> 
      <cfreturn true /> 
     <cfelse> 
      <cfreturn false /> 
     </cfif> 
    </cffunction> 

</cfcomponent> 
+0

알아보기 https://www.bennadel.com/blog/1131-ask-ben-ending-coldfusion-session-when-user-closes-browser.htm –

+0

@DanBracuk 나는이 기사를 읽었지만 여전히 그 해결책이 최선의 방법은 아니다. 일단 사용자가 브라우저를 닫으면 여전히 세션이 활성화되어 있지 않습니다. 그들이 브라우저를 다시 열고 페이지를 액세스 한 후에 만 ​​브라우저를 닫은 후 다시 열어 본 시간이 잠겨 있는지 확인할 수 있습니다. 이것이 실제 문제입니다. 사용자가 더 이상 활성 상태가 아니면 잠금을 제거해야합니다. 참고 : 내 시스템은 데이터베이스에 로그인 한 사용자를 유지하지 않습니다. 이것은 오래된 시스템이며 최근에 내 앱을 구현했습니다. –

답변

0

Ajax를 사용할 필요가 없습니다. 네이티브 cfschedule을 사용하여 로그인 한 사용자의 검사기를로드하면됩니다. db에 로그인 사용자 세부 정보를 유지할 수 있습니다. db 값 및 로그인 한 사용자와의 차이점이 있으면 최종 사용자 세션에 페이지가로드됩니다. 사용자가 시스템을 닫을 때만 알 수있는 경우에만 작동합니다. 분명히 로그 아웃하지 않고.

+0

현재 시스템에 로그인 한 사용자를 저장하는 테이블이 없습니다. 나는 그것이 최선의 해결책이 될 것이라고 동의하지만, 나는 그 순간에 그것을 사용/구현할 수 없다. 세션의 실행 여부를 확인하기 위해 대신 AJAX를 사용하는 방법이 있는지 궁금합니다. 레코드의 잠금을 제거하지 않으면 제거하십시오. –

+0

브라우저가 살아 있다는 것을 서버에 알리기 위해 브라우저를'핑 (ping) '시키려고하십니까? –