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

Session 我可以在Coldfusion会话变量中存储结构吗?,session,data-structures,coldfusion,Session,Data Structures,Coldfusion,我正在将结构传递给CF自定义标记。我希望作为这个自定义标记的CFM页面将这个结构分配给一个动态创建的会话变量。当将会话变量赋值给一个简单的值(如数字)时,创建会话变量是有效的,但当按照下面的方法将其赋值给结构时,创建会话变量会失败 <cfset Evaluate("SESSION.myVar#ATTRIBUTES.count# = #ATTRIBUTES.myStruct#")> 我认为这是可能的,但当我尝试这样做时,我得到了一个错误: 无法将复杂对象类型转换为简单值 以下是创

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

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

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

以下是创建结构的方式:

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

并通过自定义标记传递:

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

我认为评估部分把事情搞砸了。

是的,你可以

只需使用复制方法

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

是的,你可以

只需使用复制方法

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

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

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

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

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

上面的问题是evaluate语句。它试图将结构作为字符串中的一个简单值进行求值,然后对字符串求值

你可以到处走动。原因是您想要一个动态命名的会话变量


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

你可以到处走动。原因是您想要一个动态命名的会话变量


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

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

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

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


您能给我们看更多的代码吗?可能是在创建/设置结构的位置,以及将其传递给自定义标记的位置。您执行代码的方式可能有问题。是否确实从该cfset行引发了错误??可以在会话作用域中存储结构。您能给我们看更多的代码吗?可能是在创建/设置结构的位置,以及将其传递给自定义标记的位置。您执行代码的方式可能有问题。是否确实从该cfset行引发了错误??可以在会话作用域中存储结构为什么他需要使用duplicated()?这里的问题是会话变量名需要是动态的:myVarN而不仅仅是myVar。为什么他需要使用duplicated()?这里的问题是会话变量名需要是动态的:myVarN而不仅仅是myVar。是的,我对动态命名的会话变量使用Evaluate。这是我知道的唯一方法。你知道我如何构造它来处理结构赋值吗?使用关联数组表示法。请参阅和。是的,我正在对动态命名的会话变量使用Evaluate。这是我知道的唯一方法。你知道我如何构造它来处理结构赋值吗?使用关联数组表示法。见和。