Bueno .. viendo el manual de php.net seccion de la funcion setcookie() dice esto:
Cita: Fallos habituales:
Las cookies no se hacen visibles hasta la siguiente carga de una página para la que la cookie deba estar visible.
<a href='ir.asp?http://www.php.net/manual/es/function.setcookie.php' target='_blank'>http://www.php.net/manual/es/function.se...</a>
Es decir .. q son asi su funcionamiento (lo mismo ocurre con las sesiones .. hasta que no se hace un "request"(peticion via HTTP) no están disponibles).
Yo en vez de un "Refresh" haria ahi mismo un:
Header("Location: prueba.php?Id=1");
.. o incluso:
Header("Location: $PHP_SELF?Id=1");
($_SERVER['PHP_SELF'] .. deberiamos usar .. xD)
Esto nos redirecciona automaticamente a la misma pagina que lo llamó (caso de $PHP_SELF) .. Digamos q esto seria mas "limpio" . auque basicamente es lo mismo. Yo uso esta técnica en sessiones y es mas bien "transparente" cara al navegador.
Ahora, si ves los "user comments" del URL que puse (funcion setcookie) .. veras q hay alguna pequeña discursion sobre usar el "refresh" o el "location" .. pero basicamente ha de ser uno u otro.
Un saludo,