无法不使用键而是仅使用值将多个值添加到 $_SESSION 变量中

Unable to add multiple values into $_SESSION variable not using keys but only values

我需要更新 $_SESSION['all_product_ids'],所有 produkt_id 值通过 ajax 作为 POST 变量传递,并将它们保存在此会话变量的数组中。

问题是由于某种原因,该值总是被覆盖,并且永远不会添加到当前值。

我的 ajax 回调函数中有这段代码:

if( isset( $_POST['product_id'] ) ) { 

    $product_id = $_POST['product_id'];


    if ( isset ( $_SESSION['all_product_ids'] ) ) {
        // do nothing
    } else {
        $_SESSION['all_product_ids'] = [];
    }


    if ( in_array($product_id, $_SESSION['all_product_ids']) ) {
            // do nothing if product id already in the array
    } else {

        $_SESSION['all_product_ids'][] = $product_id;

    }

    echo json_encode( $_SESSION['all_product_ids'] );

}

问题是 ajax returns 总是只有一个(最后一个 clicked/added 产品 ID)所以响应是 ["78"]["60"] 但是从不 ["78", "60"]

我做错了什么?

试试这个:

<?php
session_start();
if( !empty( $_POST['product_id'] ) ) { 

    $product_id = $_POST['product_id'];

    if ( isset ( $_SESSION['all_product_ids'] ) ) {
        // do nothing
    } else {

        $_SESSION['all_product_ids'][] .= $product_id;
    }


    if ( in_array($product_id, $_SESSION['all_product_ids']) ) {
            // do nothing if product id already in the array
    } else {

        $_SESSION['all_product_ids'][] .= $product_id;

    }

    echo json_encode( $_SESSION['all_product_ids'] );

}

备注:

1 - 您需要在脚本开头添加 session_start();
2 - 我已将 isset 更改为 !empty 否则您可能会得到空值。
3 - 请注意 .= 将附加到现有数组,而 = 将替换数组中的任何内容。
4 - 我已经在我的服务器上测试了代码,并且值已成功附加到 $_SESSION['all_product_ids']

// determine if session has started
Function HasSessionStarted() {

    $result = false;

    // Check if session has started
    IF ((session_status() == PHP_SESSION_NONE) || (session_id() == '')) { 
        $result = true; 
    }

    return $result;

}

Function Upd_Product_Session() {

    $sess_products = array();

    IF ( (isset($_POST['product_id'])) && (!empty($_POST['product_id'])) ) {

        $product_id = $_POST['product_id']; // should really do some sanitization and validation

        $new_session = HasSessionStarted(); // Check Session Status
        IF ($new_session) { session_start(); }

        IF (isset( $_SESSION['all_product_ids'])) {
            $sess_products = json_decode($_SESSION['all_product_ids'], true); // json decode existing session
        }

        IF (!in_array($product_id, $sess_products) ) { // not in array -> add it
            $sess_products[] = $product_id;
        }

        // Set Session
        $_SESSION['all_product_ids'] = json_encode($sess_products);
        IF ($new_session) { session_write_close(); }

    }

    // debugging
    die('<pre>'.print_r($sess_products, true).'</pre>');

}