2017-12-11 6 views
1

Ich habe eine neue App in unserem bestehenden System erstellt. Eines der Features in meiner App erforderte den Sperrungsprozess. Sobald der Benutzer den Datensatz ausgewählt hat, sollte er eine Option/Schaltfläche Bearbeiten für alle anderen Benutzer, die gerade im System angemeldet sind, deaktivieren. Ich habe Funktion, die Benutzer onClick aktivieren kann (auf der Schaltfläche Entsperren) oder wenn Benutzer abmelden. Diese Funktion entfernt den Benutzer vom Datensatz. All das funktioniert gut und ich habe keine Probleme.Wie überprüft man, ob der Benutzer noch eingeloggt ist? Coldfusion 9/10

Nachdem ich festgestellt habe, dass einige Datensätze für mehr als einen Tag gesperrt sind. Das verursachte einige Probleme. Ich habe versucht, das Problem in meiner App zu debuggen und zu erkennen. Was ich denke, passiert einige Benutzer nie das System abmelden sie einfach nur den Browser schließen. In dieser Situation wird die Funktion, die sich um das Entfernen des Datensatzes kümmern sollte, nie ausgelöst. Ich frage mich, wie dieses Problem behoben werden kann.

Gibt es eine Möglichkeit zu überprüfen, ob der Benutzer nicht mehr aktiv ist? Eine der möglichen Lösungen, die ich mir ausgedacht habe, wäre zum Beispiel einen Ajax-Anruf alle 5 Minuten zu senden. Wenn dieser Aufruf false zurückgeben würde, würde ich die Sperre entfernen. Ich bin mir immer noch nicht sicher, wohin ich einen Ajax-Anruf schicken soll. Soll das an Application.cfc oder woanders gesendet werden? Wenn mir jemand ein Beispiel geben oder Ratschläge geben könnte, würde das helfen.

Auch ich möchte erwähnen, dass ich versucht, Application.cfc Seite für meine App zu setzen, aber wenn ich auf den Link meiner App-Seite klicken würde leer zurückgeben. Hier ist ein Beispiel für das, was ich habe:

<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

Lesen Sie dies. https://www.bennadel.com/blog/1131-ask-ben-ending-coldfusion-session-when-user-closes-browser.htm –

+0

@DanBracuk Ich las den Artikel und immer noch diese Lösung ist nicht die beste Lösung. Sobald der Benutzer den Browser schließt, mache ich es immer noch nicht, wenn eine Sitzung aktiv ist. Erst nachdem sie den Browser wieder geöffnet und auf die Seite zugegriffen haben, kann ich überprüfen, ob der Zeitraum zwischen dem Schließen des Browsers und dem erneuten Öffnen des Datensatzes gesperrt bleibt. Das ist das eigentliche Problem. Ich muss die Sperre irgendwie entfernen, wenn der Benutzer nicht mehr aktiv ist. Randnotiz: Mein System speichert keine angemeldeten Benutzer in der Datenbank. Dies ist ein altes System und ich habe meine App kürzlich implementiert. –

Antwort

0

Sie müssen nicht Ajax verwenden. Verwenden Sie einfach das native cfschedule, um einen Checker für den angemeldeten Benutzer zu laden. Sie können Login-Benutzerdetails in der Datenbank beibehalten. Sobald es einen Unterschied mit dem DB-Wert und dem eingeloggten Benutzer gibt, lädt das die Seite zur Endbenutzersitzung. Dies funktioniert nur, wenn Sie wissen, wann Benutzer das System schließen. Offensichtlich ohne Abmelden.

+0

Mein aktuelles System hat keine Tabelle, in der angemeldete Benutzer gespeichert sind. Ich stimme zu, dass dies die beste Lösung wäre, aber ich kann das im Moment nicht anwenden. Ich frage mich, ob es eine Möglichkeit gibt, AJAX stattdessen zu verwenden, um zu überprüfen, ob Sitzung ausgeführt wird, wenn nicht entfernen Sie Sperre des Datensatzes entfernen. –

+0

Möchten Sie, dass der Browser den Server ab und zu "anpingt", damit der Server weiß, dass der Browser aktiv ist? –

Verwandte Themen