Variablendeklaration - Kollision mit $_Session?

2nd

2nd

Aktives Mitglied
Thread Starter
Dabei seit
25.07.2004
Beiträge
9.018
Reaktionspunkte
243
Hi Leute, brauche mal Hintergrundinfo: Eine Variable ist folgendermassen deklariert:

PHP:
$bildLink = "draussen.jpg";

Die Session hat diese Deklaration:

PHP:
$_SESSION['bildLink'] = $bildLink;

Kommen die Namen sich in die Quere? Ich habe ein Projekt, wo es in einem Fall geht, d. h. es ist kein Problem und heute habe ich ein Problem mit dieser Deklaration - wenn ich die Sessionvariable umbennen funktioniert es dann. Darf man Sessionvariablen mit denselben Name belegen wie normale Variablen?

Danke für Hilfe,

2nd
 
Kommt das nicht auf die PHP-Version und auch die Art, wie PHP eingestellt ist an?

Ich meine, das Stichwort sei da "Register Globals".
Ich kann ja auch einstellen, ob ich GET-Parameter mit $_GET['var'] oder $var anspreche. Ebenso verhält sich das doch auch mit $_SESSION['var'].

gruß
Lukas
 
Es war auf ON gestellt (XAMPP halt), habe es auf OFF gestellt, aber es fkt. tortzdem nicht. Ich verstehe es nicht, da es in einem anderen Teil des Projektes geht.

Wenn ich mit

PHP:
unset($bildLink);

meine Variable lösche, ist die SessionVar auch weg :kopfkratz:

Ich habe jetzt erstmal alle SessionVars umbenannt, bis ich genau weiss, wie das Verhalten der Variablen ist. Hat noch jemand einen Hinweis?

2nd
 
muss mit register_globals zusammenhängen.


schau mal bitte per phpinfo() nach, ob es wirklich ausgeschaltet ist.
 
Es gibt neben resgister_globals noch so etwas wie GPC ( steht für GET, POST und Cookie). Dadurch wird festgelegt, in welcher Reihenfolge die superglobals ausgewertet werden ( und wer wen überschreiben darf).

Grundsätzlich ist

$xyz eine Variable mit Page-Scope

ist register_globals on, so werden alle per Get,Post,Cookie vorhandenen Variablen in der def. Reihenfolge übertragen. Session-Vars bleiben ja auf dem Server. Dabei sind in $_SESSION['xyz'] die xyz nur Indizes und keinesfalls mit Variablen identisch ($xyz ist etwas ganz anderes).

Dabei ist es nat. gern genommen Code a la

$user_id=$_SESSION['user_id'];

zu schreiben. Das sollte man aber in der Tat nicht machen. Weil es (a) zu Verwechslungen führen kann, (b) hier redundant ist - es kann ja wirklich die Session ausgelesen werden und (c) für Einbrüche (er GET/POST) geradezu eine Einladung! Mehr Sinn macht da schon ein:

$page_user_id=$_SESSION['user_id'];

oder ein anderer Text davor.
 
Habe ich schon - steht auf OFF. Also liegt es daran - wenn ich R_G auf ON habe, kann ich direkt mit den Variablennamen auf den Inhalt ohne $_SESSION [''] zugreifen?

Ich werde wohl nochmal bei Gelegenheit testen. Kann ich das irgendwo nachlesen?

2nd
 
Naja die manuals bei www.php.net/manual/en sind recht gut ( auch von usern ) kommentiert. Da steht eigentlich alles drinn ( man muß es nur in der schieren Menge finden).

Das es da eine Koinzidenz gibt, zeigt mir aber folgendes Google-Ergebnis:

Scheinbar wird bei register_globals = on das $_SESSION Array als letztes
extrahiert, was zwangsweise zu problemen führt wenn man der einfacheit halber
die durch GET/POST übermittelten variablen mit dem gleichen Bezeichner im
$_SESSION Array ablegt.

Das war nur eine von vielen Quellen, die genauen Einstellungen aus der php.ini sowie die betroffenen PHP-Versionen standen nat. nicht dabei. Es ist eines der Probleme von PHP, das da teilweise erst spät aufgeräumt wurde. Somit ist einiges an Code an bestimmte PHP-Versionen gebunden und einige "So geht es richtig"-Lösungen eben leider out of date..
 
Hmm :kopfkratz:

Habe folgendes ausprobiert:

PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Session Test</title>
</head>

<body>
<?php 
	$reportPicLinksFrontend = "Das ist ein Test<br>";
	echo "Zugriff auf die Var: ".$reportPicLinksFrontend;
	
	$_SESSION['reportPicLinksFrontend'] = $reportPicLinksFrontend;
	echo "<br>Zugriff auf dei SessionVar: ".$_SESSION['reportPicLinksFrontend'];
	
	echo "<br>Variable wird gelöscht.<br><br>";
	unset($reportPicLinksFrontend);
	
	echo "<br><br>Zugriff auf die Var nach Löschung der Var:".$reportPicLinksFrontend."<br><br>";
	echo "Zugriff auf die SessionVar nach Löschung der Var: ".$_SESSION['reportPicLinksFrontend'];

?>

</body>
</html>


Sowohl mit GLOBAL_REGISTERS = ON als auch OFF funktioniert alles so, wie es soll, die Variable wird gelöscht und die Sessionvariable bleibt. Warum ging das gestern nicht?

@Karsten: Ich hole mir die Variablen für die Session nicht aus $_POST Arrays, das sind Strings, die sich zu Laufzeit ergeben (aus dem Datum).

Bin ratlos,

2nd
 
Hm, heute gehts wieder? Hab ich das richtig verstanden?
Wohlmöglich musste die Session erst zerstört werden?
nur so als Idee... Das sich da was im Cahce verfangen hat...

gruß
Lukas
 
@Lukas: Mit dem anderen Bsp. geht es heute (Post #8). Das ursprüngliche ging heute früh nicht, bis ich die Variablennamen geändert habe, seitdem geht es.

2nd
 
Zurück
Oben Unten