我有我构建的系统,对于这个项目,我使用Ajax和JQuery。在后端,我使用ColdFusion和会话管理来处理用户会话变量。有两种情况(实际上是三种,如果我们考虑关闭浏览器)用户会话将结束。一种情况是,如果他们点击Logout
,那么我的功能将清除SESSION
范围内的所有信息,但会话未结束。此外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>
第二种情况是用户会话超时一次。以下是该功能的示例:
<cffunction name="timeoutSession" access="remote" output="yes" verifyclient="no" securejson="false">
<cfset temp = structClear(SESSION)>
</cffunction>
这两个函数都将清除会话范围,但不会结束用户会话。一旦用户注销并且CFID / CFTOKEN保持不变,我已使用cfdump
检查会话范围。我想知道会话cna一旦达到LogOut
或timeoutSession
函数就会结束吗?每次用户登录系统时,我还应该重写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
中执行此操作。 CFID
和CFTOKEN
相同如果用户再次登录,设置新值的最佳位置是什么?如果aynone有这方面的经验,请告诉我。我试图阻止用户使用相同的会话并提高我的SPA安全级别。