Quizas que no tengas nada, y como no validas, la variable puede estar vacia y por x razon entra al foreach...
Código PHP:
$_SESSION['ref'][$ref] = $ref; // Tiene datos ? o espacios ?
$_SESSION['precio'][$ref] = $precio; // Tiene datos ? o espacios ?
$_SESSION['nombre'][$ref] = $nombre; // Tiene datos ? o espacios ?
$_SESSION['categoria'][$ref] = $categoria; // Tiene datos ? o espacios ?
$_SESSION['cantidad'][$ref] = $cantidad; // Tiene datos ? o espacios ?
saludos