Убедитесь,
setcookie("reports_cookie[".$report_id."][report]", $report_id, time()+3600,"/");
используется ДО того, как какой-либо вывод будет сделан в браузер.
например
<html>
<head>
<title>
hello world
</title>
</head>
<?php
setcookie("reports_cookie[".$report_id."][report]", $report_id, time()+3600,"/");
?>
</html>
приведет к сбою, потому что вывод html будет отправлен до заголовка cookie.
Cookies устанавливаются и читаются так называемыми header полями. Они должны быть отправлены перед любым выводом.
Даже пробел перед открывающим тегом php может привести к сбою. даже если это пространство в файле вы «включаете» перед вызовом функции setcookie.
<?php setcookie("reports_cookie[".$report_id."][report]", $report_id, time()+3600,"/");
^-- a space making your cookies fail
Если вы не видите пробела, у вас может быть поле спецификации UTF8 в начале вашего php-документа. Рекомендуется установить в текстовом редакторе другую текстовую кодировку, например, ANSI, чтобы можно было редактировать спецификацию UTF8, чтобы вы могли удалить ее, а затем сохранить и вернуться к UTF8 без спецификации.
Кроме того, убедитесь, что вы установили cookie на весь свой домен. Если вы не укажете это, тогда файл cookie будет прочитан только на той странице, на которой он был установлен.
Также не забудьте установить время истечения, в этом случае я установил время 5 минут, после которого срок действия файла cookie истечет.
setcookie("reports_cookie[".$report_id."][report]", $report_id, time()+3600,"/");
Кроме того, подумайте, почему вы храните идентификатор отчета в виде ключа массива и значения ...