我可以在Coldfusion会话变量中存储结构吗?

时间:2011-08-10 00:45:29

标签: session data-structures coldfusion

我正在将结构传递给CF自定义标记。我希望这个自定义标记的CFM页面将此结构分配给动态创建的会话变量。创建会话变量时会将其分配给一个简单的值(如数字),但在按照我在下面的方式将其分配给结构时会失败。

<cfset Evaluate("SESSION.myVar#ATTRIBUTES.count# = #ATTRIBUTES.myStruct#")>

我认为这是可能的,但是当我尝试这样做时,我收到一个错误:     无法将复杂对象类型转换为简单值。

这是结构的创建方式:

<cfset testStruct = StructNew()>
<cfset testStruct.something = 2>

并通过自定义标记:

<cf_myTag myStruct="#testStruct#" count="#i#">

我认为评估部分在这里弄乱了。

4 个答案:

答案 0 :(得分:4)

正如Leigh所说,使用数组表示法而不是Evaluate()来创建动态命名的会话变量:

<cfset SESSION[ "myVar" & ATTRIBUTES.count ] = ATTRIBUTES.myStruct>

答案 1 :(得分:2)

是的,你可以,

只需使用复制方法

即可
<cfset SESSION.myVar = duplicate(ATTRIBUTES.myStruct) />

答案 2 :(得分:2)

是的,您可以执行以下操作: 注意我在这里使用cflock以避免任何潜在的竞争条件。

<cflock scope="session" throwontimeout="true" timeout="5" type="exclusive">
  <cfset session["myVar" & ATTRIBUTES.count] = attributes.myStruct />
</cflock>

答案 3 :(得分:1)

以上问题是评估声明。它试图将结构作为字符串中的简单值进行评估,然后评估字符串。

你可以完全放心。原因是你想要一个动态命名的会话变量吗?