如果用户注销或他们的会话超时如何结束coldfusion会话?

时间:2018-03-06 16:01:55

标签: session coldfusion session-variables session-cookies logout

我有我构建的系统,对于这个项目,我使用Ajax和JQuery。在后端,我使用ColdFusion和会话管理来处理用户会话变量。有两种情况(实际上是三种,如果我们考虑关闭浏览器)用户会话将结束。一种情况是,如果他们点击Logout,那么我的功能将清除SESSION范围内的所有信息,但会话未结束。此外CFIDCFTOKEN仍然相同。以下是注销功能的示例:

<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>

第二种情况是用户会话超时一次。以下是该功能的示例:

<cffunction name="timeoutSession" access="remote" output="yes" verifyclient="no" securejson="false">
    <cfset temp = structClear(SESSION)>
</cffunction> 

这两个函数都将清除会话范围,但不会结束用户会话。一旦用户注销并且CFID / CFTOKEN保持不变,我已使用cfdump检查会话范围。我想知道会话cna一旦达到LogOuttimeoutSession函数就会结束吗?每次用户登录系统时,我还应该重写CFID和CFTOKEN吗?这是我的Application.cfc的例子:

<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>

我不确定会话是否可以在Application.cfc中结束,或者我必须在我的cffunctions中执行此操作。 CFIDCFTOKEN相同如果用户再次登录,设置新值的最佳位置是什么?如果aynone有这方面的经验,请告诉我。我试图阻止用户使用相同的会话并提高我的SPA安全级别。

0 个答案:

没有答案