Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json ColdFusion序列化客户端变量_Json_Coldfusion - Fatal编程技术网

Json ColdFusion序列化客户端变量

Json ColdFusion序列化客户端变量,json,coldfusion,Json,Coldfusion,我希望将会话转换为客户机变量,以便迁移到集群环境 我想知道是否有什么聪明的方法可以做到这一点。我想我可以编写一些标准例程,其中有一个setter/getter,您总是使用它来设置/获取客户机变量。理想情况下,该方法仅适用于每个cfm/cfc 我想用一个application.Client对象来完成这个任务 application.Client.set('name',变量) 然后 application.Client.get('name',变量) 序列化将在那里发生。在沿着这条路径前进之前,是否有

我希望将会话转换为客户机变量,以便迁移到集群环境

我想知道是否有什么聪明的方法可以做到这一点。我想我可以编写一些标准例程,其中有一个setter/getter,您总是使用它来设置/获取客户机变量。理想情况下,该方法仅适用于每个cfm/cfc

我想用一个application.Client对象来完成这个任务

application.Client.set('name',变量)

然后

application.Client.get('name',变量)


序列化将在那里发生。在沿着这条路径前进之前,是否有人做过类似的事情,根据类型(即Stuct vs Array vs Query等)序列化不同的数据。

这会很困难,因为正如您前面的一个问题所述,客户端范围无法完全模拟会话范围,因为它只能包含简单的变量。例如,您不能在客户端中存储结构

但是,其中一种简单的变量类型是字符串

因此,从理论上讲,如果有一种方法可以将复杂的数据结构序列化为字符串,它就可以工作

幸运的是,您有这样一种机制:


如果你浏览一下你的CLIENT.data var(serial),你会发现它看起来像:

<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>
CF ProgrammerDale
请记住,这并非适用于所有解决方案。你将无法序列化CFC。还请记住,Cookie有一个大小限制(在某些配置中,客户端变量可以物理存储),因此您有可能从非常大的数据结构中丢失数据

您可以将此序列化/反序列化封装在应用程序范围内的CFC中,正如您上面所建议的那样。
的便利之处在于它是结构、数组和所有其他类型的一刀切的工具


可能不是一个非常健壮或长期的解决方案,但可能会为您指明正确的方向。

这将是一个艰难的过程,因为正如您在前面的一个问题中所述,客户端范围无法完全模拟会话范围,因为它只能包含简单的变量。例如,您不能在客户端中存储结构

但是,其中一种简单的变量类型是字符串

因此,从理论上讲,如果有一种方法可以将复杂的数据结构序列化为字符串,它就可以工作

幸运的是,您有这样一种机制:


如果你浏览一下你的CLIENT.data var(serial),你会发现它看起来像:

<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>
CF ProgrammerDale
请记住,这并非适用于所有解决方案。你将无法序列化CFC。还请记住,Cookie有一个大小限制(在某些配置中,客户端变量可以物理存储),因此您有可能从非常大的数据结构中丢失数据

您可以将此序列化/反序列化封装在应用程序范围内的CFC中,正如您上面所建议的那样。
的便利之处在于它是结构、数组和所有其他类型的一刀切的工具


可能不是一个非常健壮或长期的解决方案,但可能会为您指明正确的方向。

无论基对象是什么,序列化本身都应该是相同的。您可以使用JSON或WDDX进行序列化,但我会使用JSON,因为这不太详细。您应该注意,您将只能在客户机范围中存储可序列化对象—例如,如果您的会话范围引用了组件,那么这些组件将无法序列化并存储在客户机范围中。除此之外,您的基本方法应该可以很好地工作。

序列化本身应该是相同的,而不管基本对象是什么。您可以使用JSON或WDDX进行序列化,但我会使用JSON,因为这不太详细。您应该注意,您将只能在客户机范围中存储可序列化对象—例如,如果您的会话范围引用了组件,那么这些组件将无法序列化并存储在客户机范围中。除此之外,您的基本方法应该可以很好地工作。

对于我的一个项目,我使用了相同的方法。通常我在应用程序的每个地方都使用客户机变量,所以我必须在请求时调用客户机变量,将其反序列化并存储在请求变量中以使其可用


希望这能有所帮助。

对于我的一个项目,我使用了同样的方法。通常我在应用程序的每个地方都使用客户机变量,所以我必须在请求时调用客户机变量,将其反序列化并存储在请求变量中以使其可用


希望这有帮助。

当然,如果他们使用数据库存储,cookie限制是可以避免的(这更可能,因为它更类似于会话存储,并且打开的安全风险更小)。另外,不要忘记,您可以像WDDX一样使用JSON进行序列化。当然,如果使用数据库存储,则可以避免cookie限制(这更有可能,因为它更类似于会话存储,并且打开的安全风险更小)。另外,别忘了你可以像WDDX一样使用JSON进行序列化。是的,我想我更喜欢JSON,我担心数据库的大小。是的,我想我更喜欢JSON,我担心数据库的大小。