Session 如果用户注销或会话超时,如何结束coldfusion会话?

Session 如果用户注销或会话超时,如何结束coldfusion会话?,session,coldfusion,session-variables,session-cookies,logout,Session,Coldfusion,Session Variables,Session Cookies,Logout,我有自己构建的系统,在这个项目中,我使用了Ajax和JQuery。在后端,我使用ColdFusion和会话管理来处理用户会话变量。有两种情况(实际上,如果我们考虑关闭浏览器三),用户会话将结束。一种情况是,如果他们单击注销,则我有一个功能,可以清除会话范围中的所有信息,但会话未结束。而且CFID和CFTOKEN仍然相同。以下是注销功能的示例: <cffunction name="LogOut" access="remote" output="yes" returnformat="JSON"

我有自己构建的系统,在这个项目中,我使用了Ajax和JQuery。在后端,我使用ColdFusion和会话管理来处理用户会话变量。有两种情况(实际上,如果我们考虑关闭浏览器三),用户会话将结束。一种情况是,如果他们单击
注销
,则我有一个功能,可以清除
会话
范围中的所有信息,但会话未结束。而且
CFID
CFTOKEN
仍然相同。以下是注销功能的示例:

<cffunction name="LogOut" access="remote" output="yes" returnformat="JSON" hint="Used in session timeout handling">
    <cfset fnResults = structNew()>
    <cfset dt = createODBCDateTime(now())>

    <cfif structKeyExists(SESSION,"LoggedIn")>
        <cfset temp = structClear(SESSION)>
        <cfset fnResults.status = "200">
    <cfelse>
        <cfset fnResults.status = "400">
        <cfset fnResults.message = "Error!">
    </cfif>

    <cfreturn fnResults>
</cffunction>

我不确定会话是否可以在
Application.cfc
中结束,或者我必须在
cffunctions
中结束。同样适用于
CFID
CFTOKEN
如果用户再次登录,设置新值的最佳位置是什么?如果没有人有这方面的经验,请让我知道。我试图阻止用户使用同一会话,并提高SPA中的安全级别。

这将为您提供一些见解@Dan Bracuk我看到了这篇文章,似乎这是创建新会话范围的方法。另外,我刚刚查看了cf文档,其中有函数sessionInvalidate()。我已经测试过,如果我在注销和sessiontimeout时使用它,cfid和cftoken似乎会重置。不幸的是,在这方面没有多少资源。我想知道这是否会结束实际的会话?
sessionInvalidate()
可能是您想要的,但请理解它的功能(和功能)。这里有很好的解释-。此处的文档-请注意,它声明:sessionInvalidate()方法不会使基础JEE会话无效。当会话启动时,您可能应该查看
SessionRotate
。文档在这里-。当然还有一个警告:当启用JEE会话时,不会旋转jsessionid。这只适用于ColdFusion会话(CFID、CFTOKEN)。我也不确定这会如何影响CF会话。你的问题没有一个简单的答案。这很复杂(我也不是专家)。如果你想了解更多,请先阅读
<cffunction name="timeoutSession" access="remote" output="yes" verifyclient="no" securejson="false">
    <cfset temp = structClear(SESSION)>
</cffunction> 
<cfcomponent output="false">
    <cfset THIS.name = "MyApplication">
    <cfset THIS.sessionManagement = true>
    <cfset THIS.applicationTimeout = CreateTimeSpan(0, 8, 0, 0)>
    <cfset THIS.sessionTimeout = CreateTimeSpan(0, 2, 0, 0)>
    <cfset THIS.requestTimeOut = "60">

    <cffunction name="onApplicationStart" access="public" returntype="boolean" output="false">
        <cfset APPLICATION.appStarted = now()>
        <cfset APPLICATION.title = "My Application">
        <cfset APPLICATION.functions = CreateObject("component","udfs").init()>
        <cfset APPLICATION.sessionMinutes = 30>
        <cfreturn true>
    </cffunction>

    <!--- Runs when your session starts --->
    <cffunction  name="OnSessionStart" access="public" returntype="void" output="false">
        <!--- Clear the session. --->
        <cfset StructClear( SESSION ) />
        <!--- Set loggedin flag to false. --->
        <cfset SESSION.loggedin = false>

        <cfreturn />
    </cffunction>

    <!--- Run before the request is processed. --->
    <cffunction name="onRequestStart" returnType="boolean" output="false">
        <cfargument name="thePage" type="string" required="true">
        <cfset REQUEST.appCode = 'SPA'>
        <cfset REQUEST.appName = 'Single Page Application'>
        <cfset var page = listLast(arguments.thePage,"/")>
        <!---<cfset onApplicationStart()>--->
        <cfif !listFindNoCase("Login.cfm,Authentication.cfc",page)>      
            <cfif !structKeyExists(SESSION, "loggedin") OR SESSION.loggedin EQ false>
                <cflocation url="Login.cfm" addToken="false">
            </cfif>
        </cfif>

        <cfreturn true>
    </cffunction>
</cfcomponent>