WooCommerce cookies и сессии-получить текущие товары в корзину
Я пытаюсь изучить куки WooCommerce, ибо делаю любую функцию, работающую с продуктами, добавленными в корзину. Я написал в консоли document.cookie
И я получаю такие данные:
woocommerce_items_in_cart=1;
woocommerce_cart_hash=500d17f6c010b62b25c3f52893be945d;
Я понимаю, что печенье "
woocommerce_cart_hash" содержит продукты в корзине, но я не понимаю, как получить название продукта. Что это такое 500d17f6c010b62b25c3f52893be945d Любая помощь будет признательна.
1 ответ:
Как вы увидите ниже,
woocommerce_cart_hashне содержит продукты в корзине , потому что есть третий более сложный coockie, связанный с WooCommerce sessions DB table.Данныехранятся не в самом файле cookie , а в соответствующей ссылке, расположенной в DB WooCommerce session(Подробнее см. ниже) ...
Вы также должны отметить, что WordPress включает некоторые локальные хранилища данных.
Данные ниже приведен реальный пример, когда незарегистрированный пользователь добавляет в корзину 2 товара.
1) Woocommerce устанавливает 3 coockies, когда незарегистрированный пользователь добавляет что-то в корзину:
woocommerce_cart_hash=>44ffcb32800e5b20cfbb080753d48408(хэш безопасности / целостности)woocommerce_items_in_cart=>1(установите значение1, когда что-то находится в корзине)wp_woocommerce_session_3413758cad2ada414127ffee7347e40f=>ac5f880c99503169574ad996f35f85c5%7C%7C1469492696%7C%7C1469489096%7C%7C17e565032403642121f5ad12cfa72c41(полностью связан сwp_woocommerce_sessionsтаблица БД создавала сеанс одновременно с этим печенье)2) и в таблице БД
wp_woocommerce_sessionsсеанс генерируется одновременно:
session_id=>6session_key=>ac5f880c99503169574ad996f35f85c5session_value=>a:18:{s:4:"cart";s:600:"a:2:{s:32:"d82c8d1619ad8176d665453cfb2e55f0";a:9:{s:10:"product_id";i:53;s:12:"variation_id";i:0;s:9:"variation";a:0:{}s:8:"quantity";i:1;s:10:"line_total";d:35;s:8:"line_tax";i:0;s:13:"line_subtotal";i:35;s:17:"line_subtotal_tax";i:0;s:13:"line_tax_data";a:2:{s:5:"total";a:0:{}s:8:"subtotal";a:0:{}}}s:32:"a5bfc9e07964f8dddeb95fc584cd965d";a:9:{s:10:"product_id";i:37;s:12:"variation_id";i:0;s:9:"variation";a:0:{}s:8:"quantity";i:1;s:10:"line_total";d:18;s:8:"line_tax";i:0;s:13:"line_subtotal";i:18;s:17:"line_subtotal_tax";i:0;s:13:"line_tax_data";a:2:{s:5:"total";a:0:{}s:8:"subtotal";a:0:{}}}}";s:15:"applied_coupons";s:6:"a:0:{}";s:23:"coupon_discount_amounts";s:6:"a:0:{}";s:27:"coupon_discount_tax_amounts";s:6:"a:0:{}";s:21:"removed_cart_contents";s:6:"a:0:{}";s:19:"cart_contents_total";d:53;s:5:"total";d:53;s:8:"subtotal";i:53;s:15:"subtotal_ex_tax";i:53;s:9:"tax_total";i:0;s:5:"taxes";s:6:"a:0:{}";s:14:"shipping_taxes";s:6:"a:0:{}";s:13:"discount_cart";i:0;s:17:"discount_cart_tax";i:0;s:14:"shipping_total";N;s:18:"shipping_tax_total";i:0;s:9:"fee_total";i:0;s:4:"fees";s:6:"a:0:{}";}session_expiry=>1469492696Я не могу объяснить все основные процессы (для этого вам нужно будет посмотреть в файлах ядра php).
Но если вы посмотрите наwp_woocommerce_session_…значение cookie вы увидите, что вы можете вырезать его с помощью%7C%7Cподстрока, поэтому мы получаем здесь 4 подстроки для этого значения cookie:
ac5f880c99503169574ad996f35f85c5(та же ссылка, что и в БДsession_keyи ещеsession_valueиз таблицыwp_woocommerce_sessions).1469492696(БДsession_expiryиз таблицыwp_woocommerce_sessions).1469489096(то же самое выше).17e565032403642121f5ad12cfa72c41(??? - Я действительно не знаю, для чего это...)
Если пользователь вернется и удалит один элемент в своем тележка:
woocommerce_cart_hashcookie изменения значенийwoocommerce_items_in_cartзначение cookie не изменяется, поскольку товар остается в корзине.wp_woocommerce_session_3413758cad2ada414127ffee7347e40fзначение cookie не изменяется.- DB
wp_woocommerce_sessionsTABLE , идентификатор сеанса6был удален / заменен на Новый сгенерированный идентификатор сеанса, который отражает изменения корзины (только один продукт).
Так вот в чем дело точка вы можете увидеть связь между файлами cookie и таблицей БД сеансов
wp_woocommerce_sessions, которая содержит все данные корзины, относящиеся к незарегистрированным пользователям
(В asession_valueсериализованный многомерный массив или объект) .С класс WC_Cart вы сможете получить эти данные.
вы также должны уметь использовать синтаксисWC()->cartв вашем php коде ...С класс WC_Session_Handler вы сможете манипулировать сеансами самой.
И закончить, класс WC_Ajax используется для смены карт.
Ссылки:
Comments