Hallo zusammen,
im Rahmen der 1.8er Serie des APF (Roadmap :: Adventure PHP Framework (APF)) bin ich dabei, mich mit dem Thema Cookie-Handling zu beschäftigen. Analog zum SessionManager möchte ich die Möglichkeit bieten Namespace-basierte Cookie-Verwaltung auf einfachem Weg anzubieten.
Dazu habe ich die relevanten RFCs und das PHP-Manual konsultiert und einige Ansätze gefunden, wie Cookies zu senden sind. Ich habe beide Möglichkeiten (header('Set-Cookie: ...') und setcookie()) getestet - ohne Erfolg. Ich sehe den Set-Cookie-Header zwar im Protokoll-Header, ein
zeigt mir jedoch nicht den gewünschten Inhalt an.
Hier die Funktion, die ich mir aus einer der user contributed notes unter PHP: setcookie - Manual kopiert und ein wenig modifiziert habe:
Diese Variante funktioniert genau so wenig wie die Implementierung meines CookieManager, der wie folgt versucht ein Cookie zu setzen:
Hat irgendjemand mehr Erfahrung mit Cookies wie ich und kann mir einen Tipp geben? Habe ich in meiner Implementierung einen Denkfehler?
Any advice including RTFMs are welcome!
im Rahmen der 1.8er Serie des APF (Roadmap :: Adventure PHP Framework (APF)) bin ich dabei, mich mit dem Thema Cookie-Handling zu beschäftigen. Analog zum SessionManager möchte ich die Möglichkeit bieten Namespace-basierte Cookie-Verwaltung auf einfachem Weg anzubieten.
Dazu habe ich die relevanten RFCs und das PHP-Manual konsultiert und einige Ansätze gefunden, wie Cookies zu senden sind. Ich habe beide Möglichkeiten (header('Set-Cookie: ...') und setcookie()) getestet - ohne Erfolg. Ich sehe den Set-Cookie-Header zwar im Protokoll-Header, ein
PHP-Code:
print_r($_COOKIE);
Hier die Funktion, die ich mir aus einer der user contributed notes unter PHP: setcookie - Manual kopiert und ein wenig modifiziert habe:
PHP-Code:
function createCookie($name, $value='', $maxage=0, $path='',$domain='', $secure=false, $HTTPOnly=false){
if(is_array($name)){
list($k,$v) = each($name);
$name = $k.'['.$v.']';
}
$ob = ini_get('output_buffering');
// Abort the method if headers have already been sent, except when output buffering has been enabled
if ( headers_sent() && (bool) $ob === false || strtolower($ob) == 'off' )
return false;
if ( !empty($domain) )
{
// Fix the domain to accept domains with and without 'www.'.
if ( strtolower( substr($domain, 0, 4) ) == 'www.' ) $domain = substr($domain, 4);
// Add the dot prefix to ensure compatibility with subdomains
if ( substr($domain, 0, 1) != '.' && $domain != 'localhost' ) $domain = '.'.$domain;
// Remove port information.
$port = strpos($domain, ':');
if ( $port !== false ) $domain = substr($domain, 0, $port);
}
// Prevent "headers already sent" error with utf8 support (BOM)
//if ( utf8_support ) header('Content-Type: text/html; charset=utf-8');
if(is_array($name))
{
header('Set-Cookie: '.$name.'='.rawurlencode($value)
.(empty($domain) ? '' : '; Domain='.$domain)
.(empty($maxage) ? '' : '; Max-Age='.$maxage)
.(empty($path) ? '' : '; Path='.$path)
.(!$secure ? '' : '; Secure')
.(!$HTTPOnly ? '' : '; HttpOnly'), false);
}else{
header('Set-Cookie: '.rawurlencode($name).'='.rawurlencode($value)
.(empty($domain) ? '' : '; Domain='.$domain)
.(empty($maxage) ? '' : '; Max-Age='.$maxage)
.(empty($path) ? '' : '; Path='.$path)
.(!$secure ? '' : '; Secure')
.(!$HTTPOnly ? '' : '; HttpOnly'), false);
}
return true;
}
echo $expires = date('D, d-M-Y H:i:s \G\M\T',time() + 86400);
createCookie('test_key','test_value',$expires,'/','localhost');
echo '<br /><br />'.printObject($_COOKIE);
PHP-Code:
function createCookie($key,$value,$expire = null,$domain = null){
// set default expiration if not given as an argument
if($expire === null){
$expire = time() + $this->__ExpireTime;
// end if
}
// set default domain (=current) if not given as an argument
if($domain === null){
$domain = $_SERVER['HTTP_HOST'];
// end if
}
// call setcookie and return the result
return setcookie($key,$value,$expire,'/',$domain);
// end function
}
Any advice including RTFMs are welcome!

Kommentar