【问题标题】:Encryption format for Woocommerce data stored in database存储在数据库中的 Woocommerce 数据的加密格式
【发布时间】:2018-04-10 09:15:29
【问题描述】:

我是 Wordpress 和 Woocommerce 的新手。查看数据库,我发现存储值看起来像这样的几个文本列:

a:23:s:16:"woofc_last_added";s:32:"d770c2ff0c2b832aad82b0cbc3f144a6";s:21:"removed_cart_contents";s:6:"a:0:{}";s:10:"wc_notices ";N;s:8:"客户";s:775:"a:25:}

我已经剥离了大部分字段,但看起来有点像这样。

这是什么格式?
如何解析这种格式的值?
如何在 php 中检索此文本数据中的所有值?

【问题讨论】:

    标签: php database wordpress session woocommerce


    【解决方案1】:

    数据采用序列化保护格式

    您可以尝试使用json_decode()unserialize()maybe_unserialize() 函数,
    但您不会得到任何数据,因为它是 WC_Session_Handler 存储PROTECTED 对象。

    您需要改用WC_Session_HandlerWC_Session 可用的方法。

    1) 要获取当前客户 WC_Session_Handler 对象,您可以使用:

    // Get the current WC_Session_Handler obect
    $session_obj = WC()->session;
    
    print_r($session_obj); // Raw output
    

    2) 从定义的客户 ID 中获取 WC_Session_Handler 对象

    // The defined customer ID
    $customer_id = 5;     
    // Get an Instance of the WC_Session_Handler object
    $new_session_obj = new WC_Session_Handler();    
    // The defined customer ID
    $session_obj = $new_session_obj->get_session( $customer_id );
    

    3) 访问受保护的数据:

    ## --- Get the data in an array (values are still serialized) --- ##
    
    $session_data_array = WC()->session->get_session_data();
    print_r($session_data_array); // Raw output
    
    
    ## -------------- Get the cleaned unserialized data ------------- ##
    
    $session_cart = WC()->session->get('cart');
    $session_cart_totals = WC()->session->get('cart_totals');
    $session_applied_coupons = WC()->session->get('applied_coupons');
    $session_coupon_discount_totals = WC()->session->get('coupon_discount_totals');
    $session_coupon_discount_tax_totals = WC()->session->get('coupon_discount_tax_totals');
    $session_removed_cart_contents = WC()->session->get('removed_cart_contents');
    $session_shipping_for_package_0 = WC()->session->get('shipping_for_package_0');
    $session_previous_shipping_methods = WC()->session->get('previous_shipping_methods');
    $session_chosen_shipping_methods = WC()->session->get('chosen_shipping_methods');
    $session_shipping_method_counts = WC()->session->get('shipping_method_counts');
    $session_customer = WC()->session->get('customer');
    
    // Raw "Cart" output example
    print_r(WC()->session->get('cart'));
    

    【讨论】:

    • 感谢您的回答。我只是想知道如何解析数据。数据看起来是压缩的,所以我想我可以在一个 php 应用程序中使用它,我有很多字段要存储在数据库中。这些数据更像是我们用户的 cmets、notes 等。
    • 数据未压缩。在 Wordpress 中,存储在数据库中的所有数组或对象总是被序列化......这里,因为它是一个包含敏感数据的自定义 WooCommerce 表,所以这些数据被序列化但受到保护,因此您将无法从数据库中对其进行反序列化。现在您可以构建自己的函数代码来解析这些数据并使用 WC_Session_Handler 类和方法将其保存在自定义表中......
    • 你知道 woocommerce 多久更新一次这个字段吗?这个字段什么时候更新?是在会话结束时还是在特定方法执行时?
    【解决方案2】:

    它不是 JSON 格式,它是一种简单的 wordpress 在其表中以序列化格式保存数组的方式。 只需使用 php 反序列化函数,它会反序列化,您将能够以正常的 php 数组格式解析它。你可以在这里查看这个函数文档http://php.net/manual/en/function.unserialize.php

    【讨论】:

      【解决方案3】:

      它以序列化格式存储。使用非序列化函数可以得到普通数组。

      unserialize()

      【讨论】:

        猜你喜欢
        • 2011-06-22
        • 2014-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-20
        • 1970-01-01
        • 1970-01-01
        • 2012-04-07
        相关资源
        最近更新 更多