I думаю это может быть жестким ограничением функциональности XHR.
Установка файла client.cookie привела к тому, что заголовок Cookie отправлялся в запросах, как и ожидалось. Если вы хотите передать значение cookie в запросе ajax, это может быть правильным способом.
Обходной путь - отправить пользовательский заголовок в скрипт php со строкой cookie, которую вы хотите установить:
// in the js...
xhr.open("GET", "showcookie.php",true);
//xhr.setRequestHeader("Cookie", "foo=quux");
xhr.setRequestHeader("X-Set-Cookie", "foo2=quux");
xhr.withCredentials = true;
Затем в вашем showcookie.php вы можете получить пользовательское значение заголовка и запустить заголовок ответа set-cookie:
$cookie = $_SERVER['HTTP_X_SET_COOKIE'];
// NOTE: really should sanitise the cookie input.
header('Set-Cookie: ' . $cookie);
print_r($_COOKIE);
Обратите внимание, что вы не увидите заголовок cookie, пока браузер не проанализирует ответ. Также, пожалуйста, убедитесь, что вы дезинфицируете содержимое заголовка X_SET_COOKIE - это только подтверждение концепции:)