这很难,因为正如您在之前的一个问题中所述,CLIENT范围不能完全模拟SESSION范围,因为它只能包含简单的变量。例如,您不能在CLIENT中存储结构。
但是,这些简单变量类型之一是一个字符串。
因此,从理论上讲,如果有一种方法可以将复杂的数据结构序列化为字符串,它可以工作。
幸运的是,你有一个机制来做到这一点:<CFWDDX>
<cfset data = StructNew() />
<cfset data.name = "Dale" />
<cfset data.type = "CF Programmer" />
<cfwddx action="cfml2wddx" input="#data#" output="serial" />
<cfset CLIENT.data = serial />
如果你浏览一下你的CLIENT.data VAR(串行)你会看到它看起来像:
<wddxPacket version='1.0'><header/><data><struct><var name='TYPE'><string>CF Programmer</string></var><var name='NAME'><string>Dale</string></var></struct></data></wddxPacket>
请记住,这不适用于所有解决方案。您无法序列化CFC。还要记住,cookie有一个大小限制(在某些配置中CLIENT变量可以物理存储),因此您有可能会从非常大的数据结构中丢失数据。
如上所示,您可以将此序列化/反序列化封装在您驻留在应用程序范围内的CFC中。 <CFWDDX>
的便利之处在于它对于结构,数组和所有其他类型都是通用的。
也许不是一个非常健全或长期的解决方案,但可能会指出你在正确的方向。
当然,如果cookie限制使用数据库存储,则可以避免这种限制(更有可能,因为它更类似于会话存储并降低安全风险)。另外,不要忘记,您可以使用JSON和WDDX一样序列化。 – 2012-01-14 01:35:22
+1这两个建议,非常好的替代品。 – 2012-01-14 01:41:19