Hinzufügen dieser Kommentar als Antwort für eine bessere Formatierung
Leigh verdient den Kredit. Wenn Sie Ihre Antwort hinzufügen, entferne ich diese zugunsten Ihrer.
Angesichts des Beispiels, das Sie gerade zu Ihrer Antwort hinzugefügt haben, tun Sie es falsch. Wie Leigh in seinen Kommentaren darauf hingewiesen hat, müssen Sie den Sitzungsumfang innerhalb der Methode unterschiedlich referenzieren.
Sie fehlen auch die Argumente für die Methode.
Sie werden wahrscheinlich auch sicherstellen wollen, dass die Variablen definiert sind, bevor Sie versuchen, sie zu verwenden.
Sie sollten auch <cfqueryparam>
innerhalb Ihrer Abfragen verwenden.
sie alle zusammen und es sollte wie folgt aussehen:
<cffunction name="OnSessionEnd" access="public" returntype="void" output="false">
<cfargument name="SessionScope" type="struct" required="true" />
<cfargument name="ApplicationScope" type="struct" required="false" default="#StructNew()#" />
<cfif StructKeyExists(ARGUMENTS.ApplicationScope,"datasource") AND StructKeyExists(ARGUMENTS.SessionScope,"user_id")>
<cfquery name="local.logout" datasource="#ARGUMENTS.ApplicationScope.datasource#">
update user
set logout_date = CURRENT_TIMESTAMP
where profile_id = <cfqueryparam cfsqltype="cf_sql_integer" value="#ARGUMENTS.SessionScope.user_id#" />
</cfquery>
<cfelse>
<!--- variables are not defined, do something else here? --->
</cfif>
<cfreturn />
</cffunction>
Auch die Anfrage Umfang innerhalb dieser Methode nicht verfügbar ist, weil es nicht durch eine Anforderung aufgerufen wird.
Sie können diese Art von Informationen in [OnSessionStart] (https://helpx.adobe.com/coldfusion/cfml-reference/application-cfc-reference/onssessionstart.html) und [OnSessionEnd] (https: // helpx.adobe.com/coldfusion/cfml-reference/application-cfc-reference/onsessionend.html). – Leigh
Sobald die Sitzung tot ist und Sie zu OnSessionEnd gelangen, wo würde ich die Benutzer-ID erhalten, um zu protokollieren, dass sie jetzt ausgeloggt sind? Welcher Umfang wäre noch verfügbar? –
Wenn die Sitzung abläuft, wird onSessionEnd ausgelöst. Jede Sitzungsvariable wird existieren, bis diese Funktion beendet wird. –