php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 10.11.2008, 22:54  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard [CookieManager] Cookie wird nicht gesetzt

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

PHP-Code:
print_r($_COOKIE); 
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:

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 ( strtolowersubstr($domain04) ) == 'www.' $domain substr($domain4);
         
// Add the dot prefix to ensure compatibility with subdomains
         
if ( substr($domain01) != '.' && $domain != 'localhost' $domain '.'.$domain;
         
// Remove port information.
         
$port strpos($domain':');
         if ( 
$port !== false $domain substr($domain0$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); 
Diese Variante funktioniert genau so wenig wie die Implementierung meines CookieManager, der wie folgt versucht ein Cookie zu setzen:

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
      

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!
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 11.11.2008, 14:14  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.709
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Das Feld $_COOKIE ist erst beim nächsten Request gefüllt, nämlich dann wenn der Browser den Header Cookie gesendet hat. Sollte das etwa dein Denkfehler sein? Ich fände es äußerst seltsam.
__________________
Refining Linux Advent Calendar series “24 Outstanding ZSH Gems
Manko10 ist offline  
Alt 11.11.2008, 15:02  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.709
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Ich habe mir deinen Code nochmals genauer angesehen und folgendes festgestellt:
Der Max-Age-Header ist ungültig, weshalb das Cookie nicht angenommen wird. Max-Age != Expires. Expires ist der Header, der einen GMT-String fordert. Max-Age hingegen will einen Integer-Wert haben, der festlegt, in wie vielen Sekunden das Cookie ablaufen wird (nur HTTP 1.1, nicht 1.0).
Das andere Problem ist der Domain-Header. Dieser funktioniert auf dem localhost nur mit dem Opera. Die anderen haben Probleme mit Domains, die keine Punkte beinhalten oder localhost heißen oder what ever. Hängt sicherlich damit zusammen:
Zitat:
The IESG notes that this mechanism makes use of the .local top-level
domain (TLD) internally when handling host names that don't contain
any dots, and that this mechanism might not work in the expected way
should an actual .local TLD ever be registered.
Auf einer anderen Domain sollte das Domain-Attribut auch in anderen Browsern funktionieren, auf dem localhost musst du also die Domain-Angabe weglassen.
__________________
Refining Linux Advent Calendar series “24 Outstanding ZSH Gems

Geändert von Manko10 (11.11.2008 um 15:09 Uhr).
Manko10 ist offline  
Alt 12.11.2008, 00:05  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hi,

danke für die Info, ich schau mir das morgen nochmal genauer an, ist schon spät.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Cookie wird nicht gesetzt und Fehlermeldung! litterauspirna PHP Tipps 2008 7 07.08.2008 20:10
Cookie löschen funktioniert nicht GSJLink PHP Tipps 2007 2 24.01.2007 14:55
Cookievariablen werden nicht gesetzt PsychoEagle HTML, Usability und Barrierefreiheit 10 10.01.2007 14:11
cookie wird nicht sofort gesetzt mollitz PHP Tipps 2006 7 16.11.2006 21:41
cookie gesetzt aber kann nicht ausgelesen werden? dethlef14 PHP Tipps 2006 2 04.10.2006 18:22
Session-Cookie wird nicht gesetzt, ohne Fehlermeldung Dr_Enquinox PHP Tipps 2006 13 20.02.2006 07:33
[Erledigt] Autologin mit Cookie, wie? Beste Lösung? PHP-Fortgeschrittene 17 16.02.2006 14:03
Cookie setzten funktioniert nicht!? nicobischof PHP Tipps 2006 13 06.01.2006 13:38
Cookie DER_Brain PHP Tipps 2005-2 4 27.06.2005 17:49
Cookie löschen tomtaz PHP Tipps 2005-2 3 06.06.2005 20:50
Browser abfragen, ob ein Cookie gesetzt werden kann PHP Tipps 2005 9 11.04.2005 18:24
cookie wird nicht gesetzt - ( vorher KEINE ausgabe ) PHP Tipps 2005 4 14.02.2005 13:34
Cookie wird nicht gesetzt PHP Tipps 2005 2 10.01.2005 23:03
Cookie wird nicht gesetzt PHS PHP Tipps 2004 1 21.06.2004 14:37
[Erledigt] cookie bei erster aktualisierung auslesen... PHP Tipps 2004 3 09.06.2004 09:58

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php setcookie wird nicht gesetzt, cookies werden nicht gesendet, nicht gesetzt, cookie wird nicht gesetzt, php setcookie port, cookie manager, php session cookies werden nicht gesetzt, php cookie domain wird nicht gesetzt, wenn ein cookie gesetzt ist php, setcookie true problem kein cookie gesetzt, javascript cookiemanager, cookie nicht gesetzt werden header gesendet vbulletin, php session cookies nicht gesetzt, $maxage, php setcookie cookie nicht gesetzt, javascript cookie wird nicht gesetzt, php cookie wird nur localhost gesetzt, if (!(bool)$maxage) {, setcookie php für andere domain, cookie wird mit port nicht gesetzt

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:15 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum