php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack (1) Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
  1 links from elsewhere to this Post. Click to view. #1 (permalink)  
Alt 25-11-2008, 03:27
brabbelj
 Newbie
Links : Onlinestatus : brabbelj ist offline
Registriert seit: Jun 2007
Beiträge: 11
brabbelj ist zur Zeit noch ein unbeschriebenes Blatt
Standard Firefox weigert sich einen Cookie zu löschen

Hi,
ich versuche gerade einen Limit für die Benutzung meines Projektes zu realisieren.

Ich habe dabei allerdings ein Problem mit dem Firefox und seinem Cookie Management:
PHP-Code:
    else
    {
        
//lösche den Cookie und den Mysql eintrag
        
setcookie("dl_limit","delete",time()-3600,"/",$host);
        
$sql_delete "DELETE FROM dl_limit WHERE id = '".$id_of_user."' AND rand_value = '".$rand_of_user."'";
        
mysql_query($sql_delete);
        
$allow_dl true;
        
//Ende vom Löschen
        //Erstelle einen neuen Mysql eintrag und cookie
        
$rand_value md5(mt_rand(1,9999).time());
        
$sql_insert "INSERT INTO dl_limit (id,ip,dls,rand_value,date) VALUES ('','".$ip."','1','".$rand_value."','".$date."')";
        
mysql_query($sql_insert);
        
$sql_new_id mysql_result(mysql_query("SELECT * FROM dl_limit ORDER BY id DESC LIMIT 0,1"),"0","id");
        
setcookie("dl_limit",$sql_new_id.",".$rand_value,time()+3600*24,"/",$host);
        
//Ende vom neuen erstellen
    

Also ich lösche zuerst den Cookie dl_limit und anschließend erstelle ich wieder einen neuen.

Der firefox löscht den Cookie dl_limit, allerdings nicht, sondern erstellt einfach einen zusätzlichen.


Der Opera macht dies nicht!

Mein Skript lässt sich davon zwar nicht beirren, aber es ist trotzdem nicht sauber wenn der Firefox so viele Cookies beinhaltet, auch wenn er nach einem Tag gelöscht wird.

Also was kann ich machen?
Mit Zitat antworten
  #2 (permalink)  
Alt 25-11-2008, 08:48
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

1. Wenn du Cookies löschen willst, dann solltest du den Wert leer lassen.
2. 1 Stunde als negative Ablaufzeit ist arg wenig... Was ist, wenn der Server(oder Client) in Australien oder auf Tonga steht? Verwende besser eine Woche o.ä.
3. Warum löscht du das Cookie, wenn du doch 2 hundertstel Sekunden später wieder eins setzt? Das ist doch völliger Unsinn!!(du hast diesen Teil des HTTP nicht verstanden)
__________________
Wir werden alle sterben
Mit Zitat antworten
  #3 (permalink)  
Alt 06-01-2009, 01:24
mgutt
 Registrierter Benutzer
Links : Onlinestatus : mgutt ist offline
Registriert seit: May 2006
Beiträge: 73
mgutt ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich habe witzigerweise genau das gleiche Problem. Das existiert nur bei FF3 und diversen IE Versionen. Und zwar nimmt der Browser einfach Cookies doppelt an.

Ich habe meine Mitglieder um einen Screenshot gebeten und später teilte mir ein weiteres Mitglied mit, dass die Cookies zu 100% identisch seien, nur eben das Ablaufdatum (gültig bis) sei unterschiedlich.

Nun habe ich meinen Code geprüft und kann einfach keinen Fehler finden. Der Fehler taucht ausschließlich bei den Nutzern auf, die per Autologin neu angemeldet werden sollten. Sobald der Inhalt des Cookies verifiziert wurde, aktualisiert mein Script das Datum des Autologin-Cookies, so dass es wieder ein Jahr lang gültig ist. Genau in diesem Moment aktualisiert der Browser aber nicht das Cookie, sondern nimmt einfach das gleiche Cookie noch mal an.

Das darf doch eigentlich gar nicht passieren oder? Ich mein die Cookies heißen gleich, haben die gleiche Domain, den gleichen Pfad und sind nicht an bestimmte HTTP-Verbindungen gebunden. Also warum nimmt der Browser dann einfach das Cookie nochmal an


Ich könnte mir vorstellen, dass ich den gleichen Fehler drin habe wie brabbelj und zwei mal das gleiche Cookie lösche und wieder setze. Nur im Moment finde ich noch nicht heraus wo das passiert.

Ist es aber nicht trotzdem ein Bug der Browser ein und das selbe Cookie noch mal anzunehmen?
Mit Zitat antworten
  #4 (permalink)  
Alt 06-01-2009, 04:10
jmc
 PHP Junior
Links : Onlinestatus : jmc ist offline
Registriert seit: Mar 2006
Beiträge: 868
jmc befindet sich auf einem aufstrebenden Ast
Standard

Ich kenne auch jmd. der das Problem einmal hatte. Es kam heraus, dass es eine Anpassung an Standards darstellt wobei das Cookie folgendermassen gelöscht werden sollte:
PHP-Code:
setcookie("dl_limit"false, -1"/"$hostfalse); 
Falls es so immer noch nicht gelöscht wird liegt es sehr wahrscheinlich an deiner Variabel $host.
Also schreib die dann doch bitte einfach auch mal noch ins Forum. Ein häufiger Fehler ist auch, dass man vergisst die Domain mit einem Punkt zu beginnen.

[EDIT]
Falls es nicht funktioniert nähme mich auch noch der Response-Header vom Server wunder.

Geändert von jmc (06-01-2009 um 04:23 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 06-01-2009, 13:28
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Zitat:
Original geschrieben von mgutt
Ist es aber nicht trotzdem ein Bug der Browser ein und das selbe Cookie noch mal anzunehmen?
Im Prinzip ja, aber ich gehe eher davon aus, dass die Browser das schon richtig handhaben.
Ergo muss es sich um zwei verschiedene Cookies handeln. Die Firefox-Cookie-Liste ist immer noch[1] eine simple Text-Datei mit dem bezeichnenden Namen "cookies.txt". Die kannst du dir mit einem Text-Editor deines Vertrauens mal ansehen, dann weißt du, wo die Unterschiede zwischen deinen beiden "identischen" Cookies liegen.

--
[1] Zumindest bis FF2. Aber ich gehe mal davon aus, dass die cookies.txt auch in der Dreier-Version noch existiert.
Mit Zitat antworten
  #6 (permalink)  
Alt 08-01-2009, 16:45
Zipper5004
 Newbie
Links : Onlinestatus : Zipper5004 ist offline
Registriert seit: Oct 2007
Beiträge: 81
Zipper5004 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

kann man die Zeit nicht einfach auf 0 setzen, und der Browser löscht die Cookies automatisch? da die ablaufzeit ja erreicht ist.
Mit Zitat antworten
  #7 (permalink)  
Alt 08-01-2009, 17:08
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Automatisch?
Ja, wenn du den Browser schließt!

Session Cookies werden mit der Laufzeit 0 gesetzt.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #8 (permalink)  
Alt 09-01-2009, 11:36
Zipper5004
 Newbie
Links : Onlinestatus : Zipper5004 ist offline
Registriert seit: Oct 2007
Beiträge: 81
Zipper5004 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

dann wars mit minus, oder so, aber man kann irgendwie durch rutnersetzen der Zeit ein cookie löschen, zu mindest deaktivieren, dass der server es nicht mehr beachtet
Mit Zitat antworten
  #9 (permalink)  
Alt 27-02-2009, 15:05
mgutt
 Registrierter Benutzer
Links : Onlinestatus : mgutt ist offline
Registriert seit: May 2006
Beiträge: 73
mgutt ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also ich habe jetzt mal folgendes gemacht:
Wenn ein User sich einloggt und der Login nicht in der Lage war das Cookie zu setzen / überschreiben, wird er auf eine Seite weitergeleitet, die Step-by-Step alle möglichen Varianten durchprobiert.

1. Versuch:
Code:
setcookie('phpbb2max_data', 'a:2:{s:6:"userid";i:-1;s:11:"autologinid";s:0:"";}', 
time() + 31536000, '/', $cookie_domain);
setcookie('phpbb2max_sid', $_COOKIE['phpbb2max_sid'], 0, '/', $cookie_domain);
2. Versuch:
Code:
setcookie('phpbb2max_data', '', time() - 31536000, '/', $cookie_domain);
setcookie('phpbb2max_sid', '', time() - 31536000, '/', $cookie_domain);
3. Versuch:
Code:
setcookie('phpbb2max_data', '', 0, '/', $cookie_domain);
setcookie('phpbb2max_sid', '', 0, '/', $cookie_domain);
4. Versuch:
Code:
setcookie('phpbb2max_data', '', -1, '/', $cookie_domain);
setcookie('phpbb2max_sid', '', -1, '/', $cookie_domain);
5. Versuch:
Code:
<script type="text/javascript">
function cC(n,v,d) {
	var t = new Date();
	if (!d) {
		t = new Date(t.getTime() - 1);
	}
	else {
		t = new Date(t.getTime()+(d*24*60*60*1000));
	}
	var data = n+"="+v+"; expires="+t.toGMTString();
	data = data + "; path=/ domain=<?= $cookie_domain ?>";
	document.cookie = data;
}
function cV() {
	cC('phpbb2max_data', '', '');
}
window.onload = cV;
Nach jedem Versuch muss der User eine Seite weiterklicken, damit das Ergebnis geprüft werden kann. Das Cookie "phpbb2max_sid" wurde beim 2. Versuch erfolgreich gelöscht. Das Cookie "phpbb2max_data" wurde mit keinem der Versuche gelöscht / geändert.

Ein User hat das Problem beispielsweise mit Opera 9.63.

Dieses Problem taucht vor allen Dingen bei Usern mit Opera 9 und Firefox 3 auf (ca. 1% aller Nutzer). Ich schätze, dass bei einem Update des jeweiligen Browsers die Schreibrechte für die Cookies verloren gegangen sind und der Browser nicht mehr in der Lage ist das alte Cookie zu entfernen.

Hat noch jemand eine Idee? Meine Idee wäre es den Cookienamen in dem Fall zu ändern (wenn das Cookie nicht gesetzt werden konnte), also abhängig von der Browserversion zu benennen. Dann würden die Autologins zwar bei einem Browserupdate verloren gehen, aber das ist immer noch besser als einen Besucher zu verlieren, der nicht weiß, wie man seine Cookies löscht.

Ich dachte z.B. daran:
PHP-Code:
$cookie_name md5(SALT$_SERVER['HTTP_USER_AGENT']); 
statt:
PHP-Code:
$cookie_name 'phpbb2max_data'
Das Problem mit den doppelt gesetzten Cookies konnte ich noch nicht lösen, habe aber die Vermutung, dass es sich dabei um das gleiche Problem handelt. Das würde auch meine Vermutung, dass es sich um einen Browserbug handelt, bestätigen.

Gruß

Geändert von mgutt (28-02-2009 um 17:59 Uhr)
Mit Zitat antworten
  #10 (permalink)  
Alt 27-02-2009, 15:21
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von combie
1 Stunde als negative Ablaufzeit ist arg wenig... Was ist, wenn der Server(oder Client) in Australien oder auf Tonga steht?
Auch da ist der Unix Timestamp immer gleich ...

Zitat:
Original geschrieben von mgutt
[...] aber das ist immer noch besser als einen Besucher zu verlieren, der nicht weiß, wie man seine Cookies löscht.
Das koennte man ihm vielleicht erklaeren, auf einer Extra-Seite "Was kann ich tun, wenn ich mit dem Login Probleme habe?" - halte ich fuer sinnvoller, als irgendwelche kruden Workarounds zu implementieren, die fuer den allergroessten Teil der Nutzer nicht notwendig sind, und weiteren Aufwand im scriptseitigen Handling verursachen.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #11 (permalink)  
Alt 27-02-2009, 15:37
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

PHP-Code:
$cookie_domain md5(SALT$_SERVER['HTTP_USER_AGENT']); 
Ist völliger Unsinn, da kommt niemals eine gültige Domainmaske bei rum.


Zitat:
Auch da ist der Unix Timestamp immer gleich ...
Nicht jeder Server(aber die meisten) sendet im Response einen Timestamp mit. Leider!
Der Browser ist gehalten, sich an dem gesendeten Timestamp zu orientieren. Gibts keinen, verwendet er seine Systemzeit. Setzt man die Ablaufzeit etwas großzügiger, gibts seltener Sorgen.

In phpbb2max_data befinden sich offensichtlich serialisierte Daten. Das ist nicht sehr klug: [google]php unserialize Buffer overflow[/google]. Eine vermeidbare Angriffsfläche.



Zitat:
time() - 31536000
Finde ich unschön!


Vorschlag:
Setzen eines Cookies:
PHP-Code:
setcookie('name','daten',strtotime('+5 week'),'/','.example.com'); 
Löschen des Cookies:
PHP-Code:
setcookie('name','',strtotime('-1 year'),'/','.example.com'); 
__________________
Wir werden alle sterben

Geändert von combie (27-02-2009 um 16:13 Uhr)
Mit Zitat antworten
  #12 (permalink)  
Alt 27-02-2009, 17:05
mgutt
 Registrierter Benutzer
Links : Onlinestatus : mgutt ist offline
Registriert seit: May 2006
Beiträge: 73
mgutt ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von combie
[B]
PHP-Code:
$cookie_domain md5(SALT$_SERVER['HTTP_USER_AGENT']); 
Ist völliger Unsinn, da kommt niemals eine gültige Domainmaske bei rum.
Stimmt. Ist ein Schreibfehler. Ich meinte den $cookie_name natürlich, sorry!

Also statt:
PHP-Code:
$cookie_name 'phpbb2max_data'
das:
PHP-Code:
$cookie_name md5(SALT$_SERVER['HTTP_USER_AGENT']); 
Kritik dazu ist erwünscht.

Zitat:
In phpbb2max_data befinden sich offensichtlich serialisierte Daten. Das ist nicht sehr klug: [google]php unserialize Buffer overflow[/google]. Eine vermeidbare Angriffsfläche.
Unsinn, weil diese Sicherheitslücke bereits lange in PHP geschlossen wurde (war mal in 4.3).

Zitat:
Finde ich unschön!
PHP-Code:
strtotime('-1 year'
Aus Performance-Sicht macht der Einsatz von strtotime() an dieser Stelle keinen Sinn. Auch wenn der Negativ-Effekt nur maginal ist, reines Subtrahieren ist einfach schneller.

Geändert von mgutt (27-02-2009 um 17:22 Uhr)
Mit Zitat antworten
  #13 (permalink)  
Alt 27-02-2009, 17:25
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
Unsinn, weil diese Sicherheitslücke bereits lange in PHP geschlossen wurde (war mal in 4.3).
Und ist irgendwo in den 5.1.X Versionen wieder aufgetreten. Und davon sind noch ettliche draussen tätig. Auch gabs in den 5.2.x noch Memoryleaks, und andere seltsamme Erscheinungen, z.B. mit 32 vs. 64 Bit Daten.

Mein Tipp:
Niemals serialisierte Daten vom Browser akzeptieren.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #14 (permalink)  
Alt 27-02-2009, 17:35
mgutt
 Registrierter Benutzer
Links : Onlinestatus : mgutt ist offline
Registriert seit: May 2006
Beiträge: 73
mgutt ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von combie Und ist irgendwo in den 5.1.X Versionen wieder aufgetreten. Und davon sind noch ettliche draussen tätig. Auch gabs in den 5.2.x noch Memoryleaks, und andere seltsamme Erscheinungen, z.B. mit 32 vs. 64 Bit Daten.

Mein Tipp:
Niemals serialisierte Daten vom Browser akzeptieren.
Hmm. Gut dann baue ich mir dazu mal ein eigenes Konzept. Sollte jetzt aber nicht grundsätzlich Thema dieser Diskussion sein, auch wenn ich für den Tipp dankbar bin.

Zitat:
Original geschrieben von wahsaga Das koennte man ihm vielleicht erklaeren, auf einer Extra-Seite "Was kann ich tun, wenn ich mit dem Login Probleme habe?" - halte ich fuer sinnvoller, als irgendwelche kruden Workarounds zu implementieren, die fuer den allergroessten Teil der Nutzer nicht notwendig sind, und weiteren Aufwand im scriptseitigen Handling verursachen.
Damit bist Du gezwungen für jeden Browser eine eigene Erklärung zur Verfügung zu stellen und das bei Nutzern, die nicht mal die Bedeutung des Wortes "Cookie" kennen

Weiterhin hast Du das Problem, dass IE-Nutzer in aller Regel alle Cookies löschen müssen. Das wäre aus Nutzersicht nicht akzeptabel. Mit Komfort hat sowas auch nichts zu tun. Ich sehe es trotz des Browser-Bugs eher als meine Aufgabe, dafür eine Lösung zu finden.

Es ist sogesehen kein Problem den User-Agent in den Cookienamen einzubeziehen. Aktuell sehe ich jedenfalls keinen Nachteil dabei, außer das bei einem Update der Autologin weg ist. Aber ich denke das ist eher zu verkraften, als dem Nutzer die Aufgabe aufzuerlegen.

EDIT:
Zitat:
Original geschrieben von combie
Und ist irgendwo in den 5.1.X Versionen wieder aufgetreten. Und davon sind noch ettliche draussen tätig. Auch gabs in den 5.2.x noch Memoryleaks, und andere seltsamme Erscheinungen, z.B. mit 32 vs. 64 Bit Daten.

Mein Tipp:
Niemals serialisierte Daten vom Browser akzeptieren.
Noch mal danke für den Hinweis. Ich schreibe nach wie vor die Daten mit serialize() aber ich verzichte auf den Einsatz von unserialize(). Da ich sowieso ein preg_match() auf den Hash anwenden musste, habe ich einfach einen vollständigen preg_match() auf den gesamten Cookieinhalt umgesetzt:
PHP-Code:
if (isset($_COOKIE['phpbb2max_data'])
 && (
$_COOKIE['phpbb2max_data'] = stripslashes($_COOKIE['phpbb2max_data']))
 
// hier im forum ist ein fehler wg. smilies, daher die trennung
 
&& $_COOKIE['phpbb2max_data'] != ('a:2:' '{s:6:"userid";i:-1;s:11:"autologinid";s:0:"";}')
 && 
preg_match('#^a:2:\{s:6:"userid";i:' '([0-9]{1,8});s:11:"autologinid";s:32:"([a-f0-9]{32})";\}$#',
 
$_COOKIE['phpbb2max_data'], $matches)) {
    
$sessiondata = array(
        
'userid' => intval($matches[1]),
        
'autologinid' => $matches[2],
    );
}
else {
    
$sessiondata = array(
        
'userid' => ANONYMOUS,
        
'autologinid' => '',
    );


Geändert von mgutt (28-02-2009 um 18:25 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


LinkBacks (?)
LinkBack to this Thread: https://www.php-resource.de/forum/php-developer-forum/94669-firefox-weigert-sich-einen-cookie-zu-loeschen.html
Erstellt von For Type Datum
php Firefox weigert sich einen Cookie zu löschen This thread Refback 02-12-2014 08:03

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

11.10.2018 Berni | Kategorie: PHP/ Anzeigenmarkt
PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 10:46 Uhr.