- Assess whether it's functionally correct or not, does it generate good cookies? I don't know if it's necessary for it to repeat the expires/domain/path/secure/httponly for each cookie.
- Help reduce the bloat. I don't like how:
(a) it calls itself 3 times.
(b) it has the following code twice:
$keyPrefix?"$keyPrefix\[$key\]"$keyPrefix."[".$key."]":$key
(c) in the middle, it checks: if (is_object($val) || is_array($val)) - it seems a bit redundant.
function http_build_cookie($data, $useJson=true, $expires = 0, $path = '', $domain = '', $secure = false, $httpOnly = false, $keyPrefix = '') {
if (is_object($data)) {
$data = (array) $data;
}
if (is_array($data)) {
$cookie_parts = array();
foreach ($data as $key => $val) {
if ($useJson)
{
$cookie_parts[] = http_build_cookie(
rawurlencode($key)."="
.rawurlencode(json_encode($val)),
$useJson, $expires, $path, $domain, $secure, $httpOnly
);
}
else
{
if (is_object($val) || is_array($val)) {
$cookie_parts[] = http_build_cookie(
$val, $useJson, $expires, $path, $domain,
$secure, $httpOnly, $keyPrefix?"$keyPrefix\[$key\]"$keyPrefix."[".$key."]":$key
);
}
else
{
$cookie_parts[] = http_build_cookie(
rawurlencode($keyPrefix?"$keyPrefix\[$key\]"$keyPrefix."[".$key."]":$key)."="
.rawurlencode($val),
$useJson, $expires, $path, $domain, $secure, $httpOnly
);
}
}
}
return implode('; ', $cookie_parts);
}
if (is_scalar($data)) {
$cookie = $data;
if ($expires) {
$cookie .= '; expires=' . gmdate('D, d-M-Y H:i:s T', $expires);
}
if ($path) {
$cookie .= '; path=' . $path;
}
if ($domain) {
$cookie .= '; domain=' . $domain;
}
if ($secure) {
$cookie .= '; secure';
}
if ($httpOnly) {
$cookie .= '; HttpOnly';
}
return $cookie;
}
return '';
}