Это будет сложно, потому что, как указано в одном из ваших более ранних вопросов, КЛИЕНТ scope не может полностью подражать области SESSION, поскольку тот факт, что он может включать только простые vars. Например, вы не можете сохранить структуру в КЛИЕНТЕ.
Но одним из таких простых типов переменных является строка.
Итак, теоретически, если бы у кого-то был способ сериализации сложной структуры данных в строку, он мог бы работать.
К счастью, у вас есть механизм, чтобы сделать это: <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 вар (последовательный) вы увидите это выглядит примерно так:
<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>
Имейте в виду, что это не будет работать для всех решений. Вы не сможете сериализовать ХФУ. Помните также, что существует ограничение на размер файлов cookie (где переменные CLIENT могут храниться физически в определенных конфигурациях), поэтому у вас есть шанс потерять данные из очень больших структур данных.
Вы можете обернуть эту сериализацию/де-сериализацию в CFC, который вы размещаете в области приложения, как вы предлагаете выше. Удобство здесь с <CFWDDX>
заключается в том, что он является единственным размером для всех структур, массивов и всех других типов.
Возможно, это не очень надежное или долгосрочное решение, но может указывать на вас в правильном направлении.
Конечно, ограничение на файлы cookie можно избежать, если они используют хранилище базы данных (и это более вероятно, поскольку оно более похоже на хранилище сеансов и снижает риск безопасности). Кроме того, не забывайте, что вы можете сериализовать с JSON так же хорошо, как WDDX. –
+1 для обоих этих предложений, очень хорошие альтернативы. –