Если корзина сама по себе является CFC:
<cfset session.cart = CreateObject('component','model.objects.shoppingCart') />
, если она внутренне оборачивает массив структур и сохраняет их в SESSION или VARIABLES, то не будет работать . в любом другом случае - но не при реализации в многосерверном кластере ACF9.0.
Решение состоит в том, чтобы изменить дизайн CFC / Classes для вашего магазина таким образом, чтобы они:
Внутренне (в пределах CFC) не используйте область VARIABLES для хранения доступа к массивам, а
Внутренне (в пределах CFC), не открывайте область SESSION напрямую при чтении / записи в массивы.
Это делается с помощью Структура вместо массива (ниже приведен методобъявлено в вашей корзине покупок CFC):
<cffunction name="addItemToCart" returntype="void">
<cfargument name="item" type="any" required="true" />
<cfscript>
var id = arguments.item.getID();
if (NOT StructKeyExists(VARIABLES.userCart, 'id')
{
VARIABLES.userCart[id] = StructNew();
VARIABLES.userCart[id].qty = 0;
}
VARIABLES.userCart[id].item = arguments.item;
VARIABLES.userCart[id].qty++;
</cfscript>
В этом приведенном выше примере псевдокода VARIABLES.userCart, который является областью, доступной в пределах CFC (и совместно используемой в вызовах методов дляlife of CFC) хранит переменную userCart в виде структуры вместо массива.Затем, с некоторым изяществом, мы добавляем новые ключи в структуру на основе уникального идентификатора элемента корзины покупок и создаем подструктуру: один для хранения фактического элемента магазина (в ключе 'item') и один для хранения/ обновить количество (в ключе 'qty').
Использование структуры в качестве механизма хранения вместо массива позволит вам создать приложение CF9, которое поддерживается в вашем многосерверном кластере, если вырешите создать / сохранить ХФУ в СЕССИИ.
Итак, подведем итог:
<cfset SESSION.myCartItemCount = ArrayNew(1) />
Поддерживается.
<cfset SESSION.user = CreateObject('component','model.objects.user') />
Поддерживается, если существуетНет хранения в массиве внутри CFC .
<cfset SESSION.cart = CreateObject('component','model.objects.cart') />
Не поддерживается , если имеется внутреннее чтение / запись в массивы.
ИзменитеМассивы для структур под капотом, и вы готовы идти.