我想在会话变量中拥有一个用户对象,并且能够根据需要进行更新。如何调用将操纵现有变量的现有用户对象中的函数。我找到了调用函数的方法,但它没有调用现有的对象,而是怀疑它在调用函数之前实例化了一个新对象。
在Application.cfc中:
<cffunction name = "onSessionStart" output="no">
<cfobject name="session._user" component="user"/>
<cfscript>
...
session._user.init();
</cfscript>
</cffunction>
在User.cfc中:
<cffunction name = "init">
<cfscript>
variables.attributes.variable1 = 0;
</cfscript>
</cffunction>
<cffunction name="changeVariable" access="public">
<cfargument name = "somename">
variables.attributes.variable1 = arguments.somename;
</cffunction>
稍后在login.cfm中,请致电session._user.changeVariable(2)
如果这是不可能的,我将最终写入数据库以及从数据库写入以跟踪用户属性而不是使用会话变量。
答案 0 :(得分:4)
在onSessionStart中创建对象并将其设置为会话。如果您使用的是CF10 +,则可以在CF9中使用new()
,并且需要使用createObject()
。
<cffunction name="onSessionStart">
<!--- in CF10+ new calls init() automatically --->
<cfset session._user = new user()>
<!--- CF9 or lower --->
<cfset session._user = createObject('user').init()>
</cffunction>
在login.cfm中简单地说这是为了更新会话变量
<cfset session._user.changeVariable(2)>
答案 1 :(得分:0)
我从来没有这样做过,所以我不确定它是如何工作的,但通常我会创建user.cfc文件并将实例存储在会话中。
<cffunction name="onSessionStart" output="false">
<cfset session._user = new user()>
</cffunction>
我也会考虑使用框架和/或ORM为你处理这些东西。