Session 如果用户注销或会话超时,如何结束coldfusion会话?
我有自己构建的系统,在这个项目中,我使用了Ajax和JQuery。在后端,我使用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"
注销
,则我有一个功能,可以清除会话
范围中的所有信息,但会话未结束。而且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>