這很難,因爲正如您在之前的一個問題中所述,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