Session Konstanten?
am 25.07.2006 20:42:00 von Mathias Kubens
Hallo allesammt
Ich hoffe richtig hier zu sein.
Ich hätte da mal ein Problem das mich beschäftigt. Und zwar frage ich
mich ob es möglich ist anstelle von "Session variablen" "Session
Kontanten" zu verwenden?
Der Sinn dahinter wäre ein simples schützen von Werten wie zB userIDs
oder Namen bei einem Login. Oder um auch Fehler abzufangen wo statt
einem vergleich(==) eine zuordnung(=) steht.
Eine Session Variable kann man jederzeit mit
$_SESSION[varname]=varwert;
ändern. Nun würde ich gerne verhindern das man eine einmal gesetzte
Variable ändert. Was ja sowas wie eine Konstante wäre.
Hat einer eine Idee oder eine Methode um sowas zu bewerkstelligen?
Ich wäre für eine Anregung dankbar.
Gruß Mathias
Re: Session Konstanten?
am 25.07.2006 20:57:39 von Carsten Wiedmann
Mathias Kubens schrieb:
> Eine Session Variable kann man jederzeit mit
>
> $_SESSION[varname]=varwert;
>
> ändern. Nun würde ich gerne verhindern das man eine einmal gesetzte
> Variable ändert. Was ja sowas wie eine Konstante wäre.
Wer sollte eine Session-Variable ändern, wenn nicht du in deinem Script
selbst? (von register_globals jetzt evtl. mal abgesehen...)
Einer Konstanten den Wert von $_SESSION['varname'] zuweisen kannst du
allerdings (wenn dieser Wert in einer Konstanten zugelassen ist). Diese
Konstante lässt sich dann in diesem Script zur Laufzeit nicht mehr ändern.
Das was du willst, geht jedenfalls so nicht.
BTW:
Das "varname" in $_SESSION[varname] gehört in Quotes und ist nicht wirkich
ein Variablenname, sondern der Schlüsselname für das Element im Array
$_SESSION, auf das du gerade zugreifen willst.
Gruß
Carsten
Re: Session Konstanten?
am 25.07.2006 21:20:12 von Mathias Kubens
Carsten Wiedmann schrieb:
> Wer sollte eine Session-Variable ändern, wenn nicht du in deinem Script
> selbst? (von register_globals jetzt evtl. mal abgesehen...)
Nun da ich mit mehreren Leuten an einem privaten Community Projekt
arbeite, kann sowas unbeabsichtigt schon mal vorkommen. Und die Sessions
sind halt in allen Skripten verfügbar.
> Einer Konstanten den Wert von $_SESSION['varname'] zuweisen kannst du
> allerdings (wenn dieser Wert in einer Konstanten zugelassen ist). Diese
> Konstante lässt sich dann in diesem Script zur Laufzeit nicht mehr ändern.
Nun ist klar. Aber es soll ja über die Laufzeit hinausgehen.
> Das was du willst, geht jedenfalls so nicht.
Schade. Wäre klasse gewesen.
> BTW:
> Das "varname" in $_SESSION[varname] gehört in Quotes und ist nicht
> wirkich ein Variablenname, sondern der Schlüsselname für das Element im
> Array $_SESSION, auf das du gerade zugreifen willst.
Nun ich schreibe es immer ohne Quotes. Funktioniert recht gut, oder gibt
es einen Grund warum der Schlüssel in Quote soll?
Re: Session Konstanten?
am 25.07.2006 21:32:48 von Gregor Kofler
Mathias Kubens meinte:
> Nun da ich mit mehreren Leuten an einem privaten Community Projekt
> arbeite, kann sowas unbeabsichtigt schon mal vorkommen.
Wie ist das zu verstehen? Fummelt da jeder an den Session-Variablen rum,
wie er lustig ist? Und was sollte passieren, wenn eine Session-Variable
"fixiert" ist - kackt dann das ganze Teil einfach ab?
> Und die Sessions
> sind halt in allen Skripten verfügbar.
Das ist der Sinn und Zweck von Session-Variablen. Wenn ich das nicht
will, nehm ich keine Sessions.
> Nun ist klar. Aber es soll ja über die Laufzeit hinausgehen.
Nichts außer den von *dir allein* kontrollierten Skripten kann die
Session-Variablen ändern.
>> BTW:
>> Das "varname" in $_SESSION[varname] gehört in Quotes und ist nicht
>> wirkich ein Variablenname, sondern der Schlüsselname für das Element
>> im Array $_SESSION, auf das du gerade zugreifen willst.
>
> Nun ich schreibe es immer ohne Quotes. Funktioniert recht gut, oder gibt
Nur weil dein Error-Reporting auf "lausig" gestellt ist.
> es einen Grund warum der Schlüssel in Quote soll?
Weil es sich um einen String handelt. Kritisch wird es wenn du irgendwo ein
define ('foo', 'bar') stehen hast.
$_SESSION['foo'] ist dann ganz was anderes als $_SESSION[foo]
Du willst $_SESSION-Variablen "einfrieren", aber sowas ist dir
offensichtlich egal...
Gruß, Gregor
--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum
Re: Session Konstanten?
am 25.07.2006 21:44:22 von Wolfgang Fellger
Mathias Kubens schrieb:
>Nun ich schreibe es immer ohne Quotes.
Sehr schlechte Angewohnheit. Willst du einen String hinschreiben oder eine
Konstante? Eben.
>Funktioniert recht gut, oder gibt es einen Grund warum der Schlüssel
>in Quote soll?
Einfache Antwort: Es gehört in Anführungszeichen weil es ein String-Literal und
keine Konstante ist.
Lange Antwort: PHP ist so freundlich und wandelt unbekannte Konstanten
automatisch in Strings um. Wehe dir nur wenn jemand auf die Idee käme eine
Konstante mit genau diesem Namen zu deklarieren.
http://de.php.net/manual/de/language.types.array.php#languag e.types.array.donts
--
Wolfgang Fellger
Re: Session Konstanten?
am 25.07.2006 21:50:17 von Mathias Kubens
Gregor Kofler schrieb:
> Wie ist das zu verstehen? Fummelt da jeder an den Session-Variablen rum,
> wie er lustig ist? Und was sollte passieren, wenn eine Session-Variable
> "fixiert" ist - kackt dann das ganze Teil einfach ab?
Ich habe schon mal einen Fehler eingebaut. Ohne es direkt zu merken
hatten Gastuser plötzlich Adminrechte weil eine Abfrage nach einem Wert
ausversehen zu einer Zuweisung wurde :-)
if ($_SESSION['name']==wert) sollte es heißen
if ($_SESSION['name']=wert) hieß es dummerweise 8-)
Naja sauber programmieren will gelernt sein, und die Idee war sowas zB
abzufangen beim debuggen und um mein ID und Rechtemanagement wasserdicht
zu machen wenn externe Skripte eingefügt werden die lesen aber nicht
ändern dürfen sollen.
>>> Das "varname" in $_SESSION[varname] gehört in Quotes und ist nicht
>> Nun ich schreibe es immer ohne Quotes. Funktioniert recht gut, oder gibt
> Nur weil dein Error-Reporting auf "lausig" gestellt ist.
>> es einen Grund warum der Schlüssel in Quote soll?
> Weil es sich um einen String handelt. Kritisch wird es wenn du irgendwo ein
> define ('foo', 'bar') stehen hast.
> $_SESSION['foo'] ist dann ganz was anderes als $_SESSION[foo]
> Du willst $_SESSION-Variablen "einfrieren", aber sowas ist dir
> offensichtlich egal...
Ist es nicht. Ich freue mich immer neue Erkenntnisse über meine Fehler
zu gewinnen :-)
Gruß Mathias
Re: Session Konstanten?
am 25.07.2006 22:53:11 von Carsten Wiedmann
Mathias Kubens schrieb:
> Ich habe schon mal einen Fehler eingebaut. Ohne es direkt zu merken hatten
> Gastuser plötzlich Adminrechte weil eine Abfrage nach einem Wert
> ausversehen zu einer Zuweisung wurde :-)
> if ($_SESSION['name']==wert) sollte es heißen
> if ($_SESSION['name']=wert) hieß es dummerweise 8-)
> Naja sauber programmieren will gelernt sein, und die Idee war sowas zB
> abzufangen beim debuggen und um mein ID und Rechtemanagement wasserdicht
> zu machen wenn externe Skripte eingefügt werden die lesen aber nicht
> ändern dürfen sollen.
Naja, hier hast du ja selbst den Wert geändert... Auch wenn das jetzt kein
Vorbild zum wirklich benutzen sein soll. Damit hättest du das schnell
gemerkt:
| define('NAME', $_SESSION['name']);
| if (NAME = wert) {}
Vielleicht beschäftigst du dich mal mit dem Konzept von Unit-Tests?
Gruß
Carsten
Re: Session Konstanten?
am 25.07.2006 22:55:57 von Carsten Wiedmann
Mathias Kubens schrieb:
> Carsten Wiedmann schrieb:
> > Das "varname" in $_SESSION[varname] gehört in Quotes und ist nicht
> > wirkich ein Variablenname, sondern der Schlüsselname für das Element im
> > Array $_SESSION, auf das du gerade zugreifen willst.
>
> Nun ich schreibe es immer ohne Quotes. Funktioniert recht gut, oder gibt
> es einen Grund warum der Schlüssel in Quote soll?
Eigentich ganz einfach:
Weil es so im PHP-Manual steht!
Ganz allgemein (und nicht nur füt dich):
Würden die Leute mehr ins PHP-Manual beim Programmieren schauen und nicht
nur wie die Lemminge alles nachmachen was irgendwo bei Google gefunden wird,
dann hätten wir heute nicht so viel miesserable Scripte und hier in der
Newsgroup weniger Fragen ;-)
Gruß
Carsten
Re: Session Konstanten?
am 25.07.2006 23:31:15 von Mathias Kubens
Carsten Wiedmann schrieb:
> Eigentich ganz einfach:
> Weil es so im PHP-Manual steht!
Punkt an Dich :-)
> Ganz allgemein (und nicht nur füt dich):
> Würden die Leute mehr ins PHP-Manual beim Programmieren schauen und
> nicht nur wie die Lemminge alles nachmachen was irgendwo bei Google
> gefunden wird, dann hätten wir heute nicht so viel miesserable Scripte
> und hier in der Newsgroup weniger Fragen ;-)
Ohne Fragen wäre die Newsgroup doch fast langweilig nicht? :-)
Danke für die Antworten, haben zwar nicht wirklich geholfen. Ich werde
mein Problem halt anders anpacken. Und ja ich verwende ab sofort Quotes.
Gruß Mathias
Re: Session Konstanten?
am 26.07.2006 10:27:52 von Knut Kohl
Hallo Mathias,
Mathias Kubens schrieb am 25. Jul 2006 in de.comp.lang.php.misc:
> Ich habe schon mal einen Fehler eingebaut. Ohne es direkt zu merken
> hatten Gastuser plötzlich Adminrechte weil eine Abfrage nach einem Wert
> ausversehen zu einer Zuweisung wurde :-)
> if ($_SESSION['name']==wert) sollte es heißen
> if ($_SESSION['name']=wert) hieß es dummerweise 8-)
Aber dagegen haben wir doch was...
if ('wert' == $_SESSION['name'])
versus
if ('wert' = $_SESSION['name'])
>>>> Das "varname" in $_SESSION[varname] gehört in Quotes und ist nicht
>>> Nun ich schreibe es immer ohne Quotes. Funktioniert recht gut, oder gibt
>>> es einen Grund warum der Schlüssel in Quote soll?
Dann setze mal
error_reporting(E_ALL);
und die werden Sachen auffallen, an die noch nie gedacht hast...
> Gruß Mathias
Regards,
Knut
--
Newsoffice.de - Die Onlinesoftware zum Lesen und Schreiben im Usenet
Re: Session Konstanten?
am 28.07.2006 18:54:50 von Mathias Kubens
Knut Kohl schrieb:
> Aber dagegen haben wir doch was...
>
> if ('wert' == $_SESSION['name'])
> versus
> if ('wert' = $_SESSION['name'])
einfach ... genial 8-)