PHP $_COOKIE nicht aktuell

schlumsch

Cadet 4th Year
Registriert
Feb. 2008
Beiträge
73
Hallo,

kurze Frage zum Thema Cookie. Ich setze auf meiner Seiten einen Cookie:
Code:
$newCookieSet = false;
if ($_COOKIE['mycookie'] == '') {
	$newCookieSet = true;
	setcookie('mycookie', tep_session_id($HTTP_GET_VARS[tep_session_name()]), 0);	
	echo 'Keks erstellt';
} else {
	echo 'Keks vorhanden, nicht neu erstellt';
echo '<br>';
}

Das funktioniert wunderbar. Danach möchte ich den Wert weiterverarbeiten, wobe ich das Problem habe das mir ein
Code:
echo '<br><br>Wert im Cookie myCookie:'.$_COOKIE['mycookie'];
echo '<br><br>';
echo '<br><br>Wert im Cookie myCookie:'.$HTTP_COOKIE_VARS['mycookie'];
jeweils einen leeren String liefert. Erst beim erneuten laden der Seite wird der Wert korrekt angezeigt. (Wie) Kann ich nach dem erstellen des Cookies diesen wieder auslesen, um mit dem gespeicherten wert weiter zu arbeiten?

Danke, lg
 
Ähm. Du kannst nicht ein Cookie setzten und im selben Skript ohne Reload wieder auslesen.
Erst nach einem Refresh.

Du müsstest es zwischenspeichern.
PHP:
$newCookieSet = false;
if ($_COOKIE['mycookie'] == '') {
	$newCookieSet = true;
	setcookie('mycookie', tep_session_id($HTTP_GET_VARS[tep_session_name()]), 0);	
	$temporary_cookie = tep_session_id($HTTP_GET_VARS[tep_session_name()]);
        echo 'Keks erstellt';
} else {
	echo 'Keks vorhanden, nicht neu erstellt';
echo '<br>';
}
### später
echo '<br><br>Wert im Cookie myCookie:'.$temporary_cookie;
Und bitte, verwende KEIN "$HTTP_GET_VARS" dafür gibt's "$_GET". Finge weg von den HTTP_x_VARS!

Desweiteren stelle ich den ganzen Skript in Frage. Du willst die Session als Cookie abspeichern?
PHP:
if(empty($_SESSION))
	{
		@session_name("mycookie");
		@ini_set('session.use_cookies', '1');
		@ini_set('session.use_only_cookies', '1');
		@ini_set('session.use_trans_sid', '0'); 
		@session_cache_limiter('private');
	}
session_start();
 
Zuletzt bearbeitet:
Dabje dir für die Antwort, werde ich gleich am MO probieren... spätestens dann hörst du wieder von mir :)

ZU deiner Infragestellung - das ist nicht mein Projekt sondern ich habe es quasi aufs Auge gedrückt bekommen. Der Name der Funktion ist irreführend, ich will nur die Sessionid im Cookie speichern. Die Fkt gibt quasi lediglich die ID zurück, wer auch immer sich diesen Namen ausged8 hat...

thx & lg
 
Wenn du die Einstellung da oben übernimmst, wird automatisch ein Cookie mit der Session-ID abgespeichert.
Bei dem Beispiel würde das Cookie "mycookie" heißen.
PHP:
# Definiert den Namen des Cookies
@session_name("mycookie");
# Erlaubt die SessID in ein Cookie zu speichern
@ini_set('session.use_cookies', '1');
# ZWINGT die SessID NUR in ein Cookie zu speichern (und nicht alternative im URL weiterzugeben)
@ini_set('session.use_only_cookies', '1');
# Verbietet die SessID im URL weiderzugeben
@ini_set('session.use_trans_sid', '0');
und die Session-ID kannst du seit PHP 4 mit session_id() abrufen.
 
Zuletzt bearbeitet:
okay, nun muss ich dumm fragen: die ganze Sache läuft nur clientseitig ab, d.h. es ist keine serverkonfig notwendig?
 
Es ist eine serverseitige Kontrolle, die meines Erachtens nach sichrer ist.
So wird SessID nicht im URI/der Adresse akzeptiert. Damit schließt du aus, dass irgendwelche Benutzer 'ausversehen' einen Link mit seiner ID (und evtl. Login) weitergeben kann.

Aber die manuelle reine Sicherung der SessID in ein Cookie halt ich für sinnlos - wieso das Rat neu erfinden?

P.S.: Ich hatte damals auch eine "array_to_string()"-Funktion, bis ich merkte, dass es ein Gegenstück zu explode() und zwar implode() gibt, dass das selbe macht wie meine Funktion :-D
 
Zuletzt bearbeitet: (Uhi, katastrophale Rechtschreibfehler :D)
Mal eine weitere Frage:

ich komme auf die Page und habe noch keinen cookie. Allertdings matcht der Fall "cookie leer" nie, sndern ich bekomme immer gleich den Inhalt des Cookies ausgegeben... verraffe ich da etwas? (damnach ja, aber was? *g*)

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>';
}
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()])));
	}	
}
 
Bitte markiere den Text nicht als 'code/code' sondern als php/php.

Desweiteren, du prüfst ob das Cookie da ist am Besten so:
PHP:
if(empty($_COOKIE["mycookie"])) { echo "Kein Cookie da"; }
 
Zurück
Oben