PHP BUG oder ? COOKIE dynamisch lesen und schreiben....

andralin

Erfahrenes Mitglied
Hallo Leute,

bin dabei meine Session Verwaltung transportabel zu machen.

Also habe ich eine Config Datei in der ein Seitenname vergeben wird und beim start der seite wird dieser für ein COOKIE verwendet.

Vorher:
Code:
session_start();
	$session_ident 	= 	strtoupper(session_id());
	$session_cookie	=	$session_ident;
	$site_name = "TestSeite";	
	if(!isset($_COOKIE['TestSeite']))
	{		
		setcookie("TestSeite", $session_ident, time()+60*60*24*365); // Cookie ist 365 Tage gültig		
	}
	else
	{
		$session_cookie=$_COOKIE['TestSeite'];
		setcookie("TestSeite", $session_cookie, time()+60*60*24*365); // Cookie ist 365 Tage gültig		
	}

Nachher:
Code:
session_start();
	$session_ident 	= 	strtoupper(session_id());
	$session_cookie	=	$session_ident;
	$site_name = "TestSeite";	
	if(!isset($_COOKIE['$site_name']))
	{		
		setcookie("$site_name", $session_ident, time()+60*60*24*365); // Cookie ist 365 Tage gültig		
	}
	else
	{
		$session_cookie=$_COOKIE['$site_name'];
		setcookie("$site_name", $session_cookie, time()+60*60*24*365); // Cookie ist 365 Tage gültig		
	}

Problem: Vorher waren beim Erstaufruf beide Variablen session_ident und sessoin_cookie identisch, bei jedem weiteren neuen Aufruf konnte ich erkennen mit welcher Session man auf der Seite war.

Nachher: Nun sind beide Vars immer gleich. Kann es sein das die cookies ned mit variablen gelesen werden dürfen?

Wie kann man das besser hin bekommen?

LG Andralin
 
vielleicht wär eine Empfehlung eines Optikers sinnvol, lol

hat sich erledigt.

Lösung:
Code:
session_start();
	$session_ident 	= 	strtoupper(session_id());
	$session_cookie	=	$session_ident;

	if(!isset($_COOKIE["$site_name"]))
	{		
		setcookie("$site_name", $session_ident, time()+60*60*24*365); // Cookie ist 365 Tage gültig		
	}
	else
	{
		$session_cookie=$_COOKIE["$site_name"];
		setcookie("$site_name", $session_cookie, time()+60*60*24*365); // Cookie ist 365 Tage gültig		
	}

wenn schon dann sollte man sauber immer gleich arbeiten.

entweder '$var' oder "$var"

ich hatte es mal so mal so gehalten und scheinbar gibt das trouble.
aber warum ist mir schleierhagt.
 
ich hatte es mal so mal so gehalten und scheinbar gibt das trouble.
aber warum ist mir schleierhagt.

PHP unterscheidet ' und " insofern, als daß Zeichenketten, die zwischen einfachen Hochkommas stehen, nicht aufgelöst werden. Es verwendet ihn so wie er ist, während Strings in normalen Anführungszeichen daraufhin untersucht werden, ob evtl. eine Variable darin enthalten ist. Darum läuft das Script bei Verwendung von ' schneller ab. Im übrigen kann man sich die Striche in Indizes generell sparen. es funktioniert genauso gut ohne.
 
PHP unterscheidet ' und " insofern, als daß Zeichenketten, die zwischen einfachen Hochkommas stehen, nicht aufgelöst werden. Es verwendet ihn so wie er ist, während Strings in normalen Anführungszeichen daraufhin untersucht werden, ob evtl. eine Variable darin enthalten ist. Darum läuft das Script bei Verwendung von ' schneller ab. Im übrigen kann man sich die Striche in Indizes generell sparen. es funktioniert genauso gut ohne.

Das heisst!?

$member = "hallo";
"$member" ist genauso wie $member
'hallo' wie "hallo" nur schneller

und '$member' würde $member ausgeben
wo "$member" hallo ausgibt?

Wow, das ist mir bisher noch nie aufgefallen, allerdings arbeite ich auch meist mit "" anstatt '' nur bei SQL habe ich dann so eine Syntax!

$wert = irgendwas;
$query = "SELECT * FROM sql_table WHERE $index = 'irgendwas'; ";
oder
$query = "SELECT * FROM sql_table WHERE $index = '".$wert."'; ";

mir werden nun ein paar unerklärbare phänomene erklärbar. danke
 
Das heisst!?

$member = "hallo";
"$member" ist genauso wie $member
'hallo' wie "hallo" nur schneller

und '$member' würde $member ausgeben
wo "$member" hallo ausgibt?
Genau so ist das. Ich habe zwar noch keine Zeitvergleiche angestellt, aber die sind definitiv da. Genauso, wie nachweislich Variablennamen mit mehr als 8 Zeichen langsamer verarbeitet werden.

Wow, das ist mir bisher noch nie aufgefallen, allerdings arbeite ich auch meist mit "" anstatt '' nur bei SQL habe ich dann so eine Syntax!
Code:
$wert = irgendwas;
$query = "SELECT * FROM sql_table WHERE $index = 'irgendwas'; ";
oder 
$query = "SELECT * FROM sql_table WHERE $index = '".$wert."'; ";

mir werden nun ein paar unerklärbare phänomene erklärbar. danke

Bei SQL Anweisungen werden die ' ja gebraucht zum Einfassen von alphanumerischen Zeichenketten. Bei INT Feldern z.B. kann man sie weglassen. Für mich ist es auch am Besten lesbar, wenn der ganze String in " " gefaßt wird und die die Strings darin in '. Dann kann man sich meistens auch das maskieren von " und ' sparen, was es mMn sehr unleserlich macht.
 
Genau so ist das. Ich habe zwar noch keine Zeitvergleiche angestellt, aber die sind definitiv da. Genauso, wie nachweislich Variablennamen mit mehr als 8 Zeichen langsamer verarbeitet werden.

aber variablen mit weniger als 8 zeichen machen ein großes Prjekt unlesbar oder zumindest schwer wartbar. aber für lokale Variablen in schleifen ist das sicher sinnvoll.

Kann ich eigentlich den PHP Code so gestalten das er ergebnisse schon mal ausgibt ohne das er fertig ist? Z.B.: bei einer schleife wie z.B: bei länger dauernden SQL Abfragen. So das sich Zeile für Zeile schon mal der Bildschirm füllt wenn eine Tabelle mit vielen Einträgen gezeigt werden soll.
 
aber variablen mit weniger als 8 zeichen machen ein großes Prjekt unlesbar oder zumindest schwer wartbar. aber für lokale Variablen in schleifen ist das sicher sinnvoll.
Daß es sinnvoll ist, hab ich ja auch nicht gesagt. :)

Kann ich eigentlich den PHP Code so gestalten das er ergebnisse schon mal ausgibt ohne das er fertig ist? Z.B.: bei einer schleife wie z.B: bei länger dauernden SQL Abfragen. So das sich Zeile für Zeile schon mal der Bildschirm füllt wenn eine Tabelle mit vielen Einträgen gezeigt werden soll.
Theoretisch ja, aber nach meiner Erfahrung darf dann kein restlicher HTML Code vorhanden sein. Wenn ich nicht öffentliche Scripte laufen lasse, die ausschließlich aus PHP bestehen, z.B. um Vorschaubilder zu erzeugen, und mir dann in der Schleife den Dateinamen ausgeben lasse, macht PHP das schon. Da wird dann aber nur mit echo der Name ausgegeben und Schluß. Als Teil eines umgebenden HTML Scripts dürfte das nicht funktionieren. Hab es aber auch noch nie ausprobiert.
 
Zurück