Problemas ao com uma $_session [RESOLVIDO]

O problema :
estou tentando reproduzir um carrinho de compras em php, me deparei com esse problema…
na página do carrinho tenho esse código:

<?php 
session_start();
require 'conn.php';
$id_produto = addslashes($_GET['id']);
 
if (!isset($_SESSION['carrinho'])) {
    $_SESSION['carrinho'] = array();
}   

$read_produto = mysqli_query($conn,"SELECT * FROM produtos WHERE produto_id = $id_produto ORDER BY produto_nome ASC" );
     if (mysqli_num_rows($read_produto)) {
        foreach ($read_produto as $read_produto_view) ;
        if ($_SESSION['carrinho'][$id_produto]){          <<<< linha do erro;
            $_SESSION['carrinho'][$id_produto]+=1;
        }else{
             $_SESSION['carrinho'][$id_produto]=1;
        }

    }
    print_r($_SESSION['carrinho']);
?>

retorna esse erro :

Notice: Undefined offset: 3 in C:\xampp\htdocs\shop\carrinho.php on line 13

Observação: o número ‘3’ do erro é o valor que passei via get para a página;

além do erro, ele não mantém o array ativo quando navego para outras páginas e tento adicionar outros produtos, ele “cria” outra array e adiciona!

Essa linha…

if ($_SESSION['carrinho'][$id_produto]){

Veja se resolve assim…

if (isset($_SESSION['carrinho'][$id_produto])){

Obs: esse foreach é desnecessário já que você apenas declarou e terminou com ; no final, seria melhor comentá-lo afinal você não precisa percorrer uma lista de produtos vindos do banco, pois você já comparou um único produto no sql e pela lógica é apenas um produto que ela retorna…

Ja tentei, o erro some mas continua sem “salvar” a session…

Você está usando esse trecho em outras páginas?

if (!isset($_SESSION['carrinho'])) {
    $_SESSION['carrinho'] = array();
}

Se sim, tome cuidado para não estar assim em algum ponto do código…

if (isset($_SESSION['carrinho'])) {
    $_SESSION['carrinho'] = array();
}

É uma diferença sutil mas importante… pelo que você relata em algum ponto você está “limpando” o carrinho…

Também interessante ver se essa linha retorna maior que zero…

if (mysqli_num_rows($read_produto)) {

Caso o contrário nunca irá entrar na sessão e adicionar o item no carrinho…

so uso o :

if (!isset($_SESSION['carrinho'])) {
    $_SESSION['carrinho'] = array();
}

nessa página, e o if retorna true se não nem leria esta linha… eu acho…

Para os que acompanharem, o problema em meu código era que meus COOKIES estavam bloqueados, não permitindo salvar a session!!