ABE*_*ABE 6 javascript cookies wordpress session woocommerce
我尝试学习WooCommerce的cookie,用于执行添加到购物车中的产品操作的任何功能.我在控制台写道document.cookie
我得到了这些数据:
woocommerce_items_in_cart=1;
woocommerce_cart_hash=500d17f6c010b62b25c3f52893be945d;
Run Code Online (Sandbox Code Playgroud)
我知道cookie" woocommerce_cart_hash"包含购物车中的产品,但我不明白如何获取产品的名称.它是什么500d17f6c010b62b25c3f52893be945d
任何帮助,将不胜感激.
Loi*_*tec 19
正如您将在下面看到的,woocommerce_cart_hash不包含购物车中的产品,因为存在与WooCommerce会话数据库表相关的第三个更复杂的coockie.
数据不会存储在cookie中,而是存储在 DB WooCommerce会话中的相应参考中(详见下文) ......
您还需要注意,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此cookie同时与DB表创建的会话完全相关)
2)在DB表中wp_woocommerce_sessions同时生成一个会话:
session_id=>6
session_key=>ac5f880c99503169574ad996f35f85c5
session_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子字符串来剪切它,所以我们得到这个cookie值的4个子串:
ac5f880c99503169574ad996f35f85c5(与DBsession_key和session_value表中的相同参考wp_woocommerce_sessions).1469492696(session_expiry表格的DBwp_woocommerce_sessions).1469489096(以上相同的东西).17e565032403642121f5ad12cfa72c41(??? - 我真的不知道这是为了什么...)
如果用户回来并删除购物车中的一件商品:
woocommerce_cart_hashcookie值的变化woocommerce_items_in_cart当商品保留在购物车中时,Cookie值不会更改.wp_woocommerce_session_3413758cad2ada414127ffee7347e40fcookie值不会改变.wp_woocommerce_sessionsTABLE,会话ID6已被删除/替换为新生成的会话ID,这反映了购物车的更改(只有一个产品).因此,此时您可以看到cookie和会话数据库表之间的关系
wp_woocommerce_sessions,其中包含与非登录用户相关的所有购物车数据
(在session_value序列化的多维数组或对象).使用Class WC_Cart,您将能够获得此数据.
您还应该能够WC()->cart在PHP代码中使用语法...使用Class WC_Session_Handler,您将能够自己操作会话.
最后,Class WC_Ajax用于购物车更换.
参考文献:
只是为了跟进此事,以防有人感兴趣。所选答案对于分解问题非常有帮助。OP 询问如何从会话 cookie 中获取产品,所以我想我会跟进。
以下是我如何从wc_woocommerce_session_cookie 中提取购物车数据:
$session_id = null;
$values = null;
foreach( $_COOKIE as $key => $value ) {
if( stripos( $key, 'wp_woocommerce_session_' ) === false ) {
continue;
}
$values = explode( '||', $value );
}
$session_id = $values[0];
$session = new WC_Session_Handler();
$session_data = $session->get_session( $session_id );
// Contains array of items in cart including product ids, quantities, totals, etc.
$cart_data = unserialize( $session_data['cart'] );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6007 次 |
| 最近记录: |