What are the best practices for handling and storing user-selected products in a PHP session for a shopping cart feature?

When handling and storing user-selected products in a PHP session for a shopping cart feature, it is important to serialize the product data before storing it in the session to ensure proper handling of complex data types. Additionally, it is recommended to check for existing products in the session before adding new ones to avoid duplicates. Finally, make sure to unset or remove products from the session when they are removed from the cart to keep the data up to date.

// Start or resume the session
session_start();

// Function to add a product to the shopping cart
function addProductToCart($product) {
    $cart = isset($_SESSION['cart']) ? unserialize($_SESSION['cart']) : [];
    
    // Check if the product is already in the cart
    foreach ($cart as $item) {
        if ($item['id'] == $product['id']) {
            // Product already exists in the cart, update quantity or other details here
            return;
        }
    }
    
    // Add the product to the cart
    $cart[] = $product;
    $_SESSION['cart'] = serialize($cart);
}

// Function to remove a product from the shopping cart
function removeProductFromCart($productId) {
    $cart = isset($_SESSION['cart']) ? unserialize($_SESSION['cart']) : [];
    
    // Find and remove the product from the cart
    foreach ($cart as $key => $item) {
        if ($item['id'] == $productId) {
            unset($cart[$key]);
        }
    }
    
    // Update the cart in the session
    $_SESSION['cart'] = serialize($cart);
}