Prüfen ob Cookie existiert - Fehler

schlumsch

Mitglied
Hallo,

ich setze via php ein cookie. Das funktioniert soweit auch wunderbar. Allerdings möchte ich vorher gerne abfragen ob das cookie bereits existiert. Nun habe ich den nachfolgenden code, ich komme ganz frisch auf die page und habe noch kein cookie. In meinen testausgaben wird mir allerdings angezeigt, das ein cookie existiert, der Inhalt wird ausgegeben, und vor allem wird der cookie neu erstellt. Kann mir irgendwer erklären wieso beim ersten Laden der Page nicht zumindest einmal ausgegeben wird, dass mein cookie nicht existiert bzw. ein "Kesk neu erstellt" (s.u. code) ?


Code:
	echo '$_COOKIE[mycookie]:  '.$_COOKIE['mycookie'].'<br>';


if ($_COOKIE['mycookie'] != '') {
	echo '$_COOKIE != leer<br>';
}

if ($_COOKIE['mycookie'] <> '') {
	echo '$_COOKIE <> leer<br>';
}

if ($_COOKIE['mycookie'] == ' ') {
	echo '$_COOKIE = leerzeichen<br>';
}
if (isset($_COOKIE['mycookie'])) {
	echo 'isset($_COOKIE<br>';
}
if (!isset($_COOKIE['mycookie'])) {
	echo '<b>!</b>isset($_COOKIE<br>';
}

$newCookieSet = false;
// kein cookie vorhanden, Cookie setzen
if ($_COOKIE['mycookie'] == '') {
	echo 'Keks erstellt';
	$newCookieSet = true;
	setcookie('mycookie', tep_session_id($_GET[tep_session_name()]), 0);
	$newsetcookie = tep_session_id($_GET[tep_session_name()]);	
} else {
	echo 'Keks vorhanden, nicht neu erstellt';
echo '<br>';
}

if ($newCookieSet == false) {
	echo '$newCookieSet false';
} else {
	echo '$newCookieSet true';
}

echo 'tep_session_name() :'.tep_session_name();
echo '<br>';
echo '$_GET[tep_session_name()] :'.$_GET[tep_session_name()];
echo '<br>';
echo 'tep_session_id($_GET[tep_session_name()]): '.tep_session_id($_GET[tep_session_name()]);       
echo '<br><br>';       
echo '<br><br>Wert im Cookie myCookie:'.$_COOKIE['mycookie'];

// cookie wurde neu gesetzt
if ($newCookieSet == true ) {
	if ($_GET[tep_session_name()] <> $newsetcookie) {
			tep_redirect(tep_href_link_withoutOscId('index.php?osCsid='.tep_session_id($_GET[tep_session_name()])));
	}
} else {
	// kein neuer cookie gesetzt -> hat schon existiert
	if ($_GET[tep_session_name()] <> $_COOKIE['mycookie']) {
			echo 'kein keks erstellt, ergo injection';
			tep_redirect(tep_href_link_withoutOscId('index.php?osCsid='.tep_session_id($_GET[tep_session_name()])));
	}	
}

Ausgabe:
------------

_COOKIE[mycookie]: gvd7p75uk8ph7h2i3d0i1q5190
$_COOKIE != leer
$_COOKIE <> leer
isset($_COOKIE
Keks vorhanden, nicht neu erstellt
$newCookieSet falsetep_session_name() :osCsid
$_GET[tep_session_name()] :gvd7p75uk8ph7h2i3d0i1q5190
tep_session_id($_GET[tep_session_name()]): gvd7p75uk8ph7h2i3d0i1q5190
 
Was heißt "ganz frisch"? Verwendest du Tabbed-Browsing und hast nur das Tab geschlossen? Waren außer dem Browser-Fenster, in dem du testest noch andere Browser-Fenster offen?

Der Browser muss komplett beendet werden, damit ein mit setcookie(..,..,0) erstelltest Cookie nach der Session abläuft und damit in der nächsten Session nicht mehr gültig ist.
 
Ich verwende zwar tabbed-Browsing, jedoch lösche ich jeweils alle cookies manuell im menü. Mal ganz davon abgesehen habe ich eben alle Tabs geschlossen, alle cookies gelöscht, den browser geschlossen und neu gestartet und ich bekomme die gleichen Anzeuigen
 
Hallo,

wie saftmeister schon sagte, ist bestimmt noch ein Cookie gesetzt, denn sonst würde die Ausgabe anders aussehen. Am besten wirklich mal die Cookies im Browser löschen und vielleicht sogar noch den Browser anschließend komplett schließen. Mittlerweile haben auch viele Browser die Funktionalität des speicherns einer Session, so das die alten Tabs sofort wieder aufgemacht werden. Gegebenenfalls mal deaktivieren.

Grüße
Manuel F.
 
Also ober halb des Scriptes fängt meine php-pahe an, erga da ist garnichts.

@ Gainwar: Wie schon gesagt mache ich genau das. Ich schliesse alle Tabs in alles Instanzen aller 3 Browser ID, Mozilla und Opera. Ich wechsle in allen Browsern auf eine andere Page, lösche im Menü aller Browser die Cookies, schliesse jeden Browser, checke im taskmanager ob der Prozess auch wirklich weg ist. Ich starte die Browser, vergewissere mich das alle cookies weg sind und danach bekomme ich die oben angeführte Ausgabe in allen Browsern... :) :(
 
Ist es möglich, das diese Datei irgendwo anders included wird? Wenn nein, wäre es möglich, das header() die Seite neu lädt und das Phänomen, dass das Cookie bereits gesetzt ist, wäre geklärt.

Ansonsten finde ich es schon etwas seltsam...

Edit: LOL!

PHP:
tep_redirect(tep_href_link_withoutOscId('index.php?osCsid='.tep_session_id($_GET[tep_session_name()]))); // << innerhalb des if-else-Zweigs weiter unten
 
Zuletzt bearbeitet:
Zurück