/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
$_session
Fra : Hans-Ole Jensen


Dato : 19-12-07 10:11

Hvad er forskellen på $_SESSION['navn'] og $_SESSION[navn]

Jeg har konstateret at $_SESSION['navn'] skifter værdi når $navn skifter
værdi

Jeg har en funktion som returnerer data fra en database med "list"

list ($navn,$adresse,$ab,$ac,$ad)=
hent_bruger_data_by_id($myrow[bruger_id]);

får $_SESSION['navn'] værdien fra $navn

Ændrer jeg navnet i list til $xnavn så sker der ikke noget med
$_SESSION['navn']

Er der en direkte sammenhæng mellem de to variabler ? eller dette en fejl ?

Jeg kan naturligvis bare ændre variabelnavnet men det kunne være rart at
vide.


Hans-Ole






 
 
Birger (19-12-2007)
Kommentar
Fra : Birger


Dato : 19-12-07 11:32

"Hans-Ole Jensen" <hoj@gonzosoft.dk> skrev i en meddelelse
news:4768e00f$0$2096$edfadb0f@dtext02.news.tele.dk...
> Hvad er forskellen på $_SESSION['navn'] og $_SESSION[navn]
>
> Jeg har konstateret at $_SESSION['navn'] skifter værdi når $navn skifter
> værdi
>
> Jeg har en funktion som returnerer data fra en database med "list"
>
> list ($navn,$adresse,$ab,$ac,$ad)=
> hent_bruger_data_by_id($myrow[bruger_id]);
>
> får $_SESSION['navn'] værdien fra $navn
>
> Ændrer jeg navnet i list til $xnavn så sker der ikke noget med
> $_SESSION['navn']
>
> Er der en direkte sammenhæng mellem de to variabler ? eller dette en fejl
> ?
>
> Jeg kan naturligvis bare ændre variabelnavnet men det kunne være rart at
> vide.
>
>
> Hans-Ole


Som jeg ser på det, er $_SESSION et associativt array, hvis "scope" blot er
hele sessionen, og ikke som et normalt array.
$_SESSION[ 'navn'] er indholdet af arrayet i position 'navn', mens
$_SESSION[ navn] er noget vrøvl - med mindre du har assignet et eller andet
til navn.

$_SESSION[ 'navn'] skal ikke kunne ændres, med mindre du explicit beder om
det, med en ny assignment, og der skal ikke være nogen sammenhæng mellem
$_SESSION og andre variable.

Så det du beskriver her, må absolut være en fejl.
Jeg bruger selv $_SESSION uden problemer i PHP 5 hos one.com

Man skal huske i alle filer, at have session_start(); for at have adgang til
$_SESSION for det aktuelle script - men det skal ikke ændre værdien, den vil
blot være udefineret.


Birger
-----
http://bbsorensen.dk



Martin (19-12-2007)
Kommentar
Fra : Martin


Dato : 19-12-07 13:32

Birger wrote:
> $_SESSION[ 'navn'] er indholdet af arrayet i position 'navn', mens
> $_SESSION[ navn] er noget vrøvl - med mindre du har assignet et eller andet
> til navn.

Ovenstående er faktisk fuldstændig ens... begge returner det samme.
At så syntax highlightning bliver meget pænere med 'navn' versionen er
så noget helt andet.

Samme opnås også med _POST, _GET osv.

>
> $_SESSION[ 'navn'] skal ikke kunne ændres, med mindre du explicit beder om
> det, med en ny assignment, og der skal ikke være nogen sammenhæng mellem
> $_SESSION og andre variable.
>
> Så det du beskriver her, må absolut være en fejl.

Så vidt jeg lige husker, så kan register_globals være en frygtelig
faktor i dette spil.
(Kan desværre ikke teste det, da det er pillet fra i PHP 6 som jeg kører
på min testmaskine, og ingen af mine webhosts kører med register_globals

register_globals = on // php.ini

$_SESSION['navn'] = 'Hej';
echo $navn; // Hej
$navn = 'Muhko';
echo $_SESSION['navn']; // Muhko

Birger (19-12-2007)
Kommentar
Fra : Birger


Dato : 19-12-07 14:55

"Martin" <maaNO@SPAMscandesigns.dk> skrev i en meddelelse
news:47690f56$0$90268$14726298@news.sunsite.dk...
> Birger wrote:
>> $_SESSION[ 'navn'] er indholdet af arrayet i position 'navn', mens
>> $_SESSION[ navn] er noget vrøvl - med mindre du har assignet et eller
>> andet til navn.
>
> Ovenstående er faktisk fuldstændig ens... begge returner det samme.
> At så syntax highlightning bliver meget pænere med 'navn' versionen er så
> noget helt andet.
>
> Samme opnås også med _POST, _GET osv.
>
>>
>> $_SESSION[ 'navn'] skal ikke kunne ændres, med mindre du explicit beder
>> om det, med en ny assignment, og der skal ikke være nogen sammenhæng
>> mellem $_SESSION og andre variable.
>>
>> Så det du beskriver her, må absolut være en fejl.
>
> Så vidt jeg lige husker, så kan register_globals være en frygtelig faktor
> i dette spil.
> (Kan desværre ikke teste det, da det er pillet fra i PHP 6 som jeg kører
> på min testmaskine, og ingen af mine webhosts kører med register_globals
>
> register_globals = on // php.ini
>
> $_SESSION['navn'] = 'Hej';
> echo $navn; // Hej
> $navn = 'Muhko';
> echo $_SESSION['navn']; // Muhko

Man bliver stadig klogere. Ser ud til at Hans-Ole's problem er
register_globals.
http://www.php.net/manual/da/security.globals.php
På one.com, vælges registerglobals i kontrolpanelet, og kan svjv. ikke
ændres på anden vis. Den er - og bør IMHO være off.

fra http://dk.php.net/manual/da/language.types.array.php :
"
<?php
$foo[bar] = 'enemy';
echo $foo[bar];
// etc
?>
This is wrong, but it works. Then, why is it wrong? The reason is that this
code has an undefined constant (bar) rather than a string ('bar' - notice
the quotes), and PHP may in future define constants which, unfortunately for
your code, have the same name. It works because PHP automatically converts a
bare string (an unquoted string which does not correspond to any known
symbol) into a string which contains the bare string. For instance, if there
is no defined constant named bar, then PHP will substitute in the string
'bar' and use that.
"

Altså :
$_SESSION[ navn] er noget vrøvl der kun virker fordi PHP på dette område, er
lige så venlig som browsere er mod HTML.
Med mindre navn er en defineret konstant (som så pr. konvention burde have
været med store bogstaver) - i hvilket tilfælde man vil få noget andet end
$_SESSION[ 'navn'], med mindre navn er define("navn", "navn");.



Birger
-----
http://bbsorensen.dk



Martin (19-12-2007)
Kommentar
Fra : Martin


Dato : 19-12-07 22:46

Birger wrote:
> "Martin" <maaNO@SPAMscandesigns.dk> skrev i en meddelelse
> news:47690f56$0$90268$14726298@news.sunsite.dk...
>> Birger wrote:
>>> $_SESSION[ 'navn'] er indholdet af arrayet i position 'navn', mens
>>> $_SESSION[ navn] er noget vrøvl - med mindre du har assignet et eller
>>> andet til navn.
>> Ovenstående er faktisk fuldstændig ens... begge returner det samme.
>> At så syntax highlightning bliver meget pænere med 'navn' versionen er så
>> noget helt andet.
>>
>> Samme opnås også med _POST, _GET osv.
>>
>>> $_SESSION[ 'navn'] skal ikke kunne ændres, med mindre du explicit beder
>>> om det, med en ny assignment, og der skal ikke være nogen sammenhæng
>>> mellem $_SESSION og andre variable.
>>>
>>> Så det du beskriver her, må absolut være en fejl.
>> Så vidt jeg lige husker, så kan register_globals være en frygtelig faktor
>> i dette spil.
>> (Kan desværre ikke teste det, da det er pillet fra i PHP 6 som jeg kører
>> på min testmaskine, og ingen af mine webhosts kører med register_globals
>>
>> register_globals = on // php.ini
>>
>> $_SESSION['navn'] = 'Hej';
>> echo $navn; // Hej
>> $navn = 'Muhko';
>> echo $_SESSION['navn']; // Muhko
>
> Man bliver stadig klogere. Ser ud til at Hans-Ole's problem er
> register_globals.
> http://www.php.net/manual/da/security.globals.php
> På one.com, vælges registerglobals i kontrolpanelet, og kan svjv. ikke
> ændres på anden vis. Den er - og bør IMHO være off.

Der var også snak om at PHP 5 skulle have taget denne ud af configgen og
være umulig at kunne ændre den, men da der stadig efter deres mening er
mange som stadig koder efter den er on, så ville der nok være for mange
problemer. Men 6'eren har smidt den ud... :)

>
> fra http://dk.php.net/manual/da/language.types.array.php :
> "
> <?php
> $foo[bar] = 'enemy';
> echo $foo[bar];
> // etc
> ?>
> This is wrong, but it works. Then, why is it wrong? The reason is that this
> code has an undefined constant (bar) rather than a string ('bar' - notice
> the quotes), and PHP may in future define constants which, unfortunately for
> your code, have the same name. It works because PHP automatically converts a
> bare string (an unquoted string which does not correspond to any known
> symbol) into a string which contains the bare string. For instance, if there
> is no defined constant named bar, then PHP will substitute in the string
> 'bar' and use that.
> "
>
> Altså :
> $_SESSION[ navn] er noget vrøvl der kun virker fordi PHP på dette område, er
> lige så venlig som browsere er mod HTML.

Enig.. der er nogle ting som er uhensigtsmæssige - og sikkert kun
medtaget for at gøre det mere brugervenligt, som så i sidste ende
faktisk har den modsatte virkning.

også derfor jeg bedst kan lide at holde mig til en standardisering af
koden, altså gøre tingene på den samme måde hvergang, istedet for at
have 2 vidt forskellige slags koder.

Men det er jo så en helt anden snak :)

> Med mindre navn er en defineret konstant (som så pr. konvention burde have
> været med store bogstaver) - i hvilket tilfælde man vil få noget andet end
> $_SESSION[ 'navn'], med mindre navn er define("navn", "navn");.
>
>
>
> Birger
> -----
> http://bbsorensen.dk
>
>

Peter Brodersen (19-12-2007)
Kommentar
Fra : Peter Brodersen


Dato : 19-12-07 14:57

On Wed, 19 Dec 2007 13:32:21 +0100, Martin <maaNO@SPAMscandesigns.dk>
wrote:

>> $_SESSION[ 'navn'] er indholdet af arrayet i position 'navn', mens
>> $_SESSION[ navn] er noget vrøvl - med mindre du har assignet et eller andet
>> til navn.
>
>Ovenstående er faktisk fuldstændig ens... begge returner det samme.
>At så syntax highlightning bliver meget pænere med 'navn' versionen er
>så noget helt andet.

Forudsætningen er, at navn så ikke er en konstant.

Man "kan" også godt fx skrive:
   print hej;
Men først bliver hej betragtet som en konstant. Idet denne konstant
ikke findes, bliver det så efterfølgende betragtet som en streng (og
udløser evt. en passende notice)

--
- Peter Brodersen
Kendt fra Internet

Martin (19-12-2007)
Kommentar
Fra : Martin


Dato : 19-12-07 22:47

Peter Brodersen wrote:
> On Wed, 19 Dec 2007 13:32:21 +0100, Martin <maaNO@SPAMscandesigns.dk>
> wrote:
>
>>> $_SESSION[ 'navn'] er indholdet af arrayet i position 'navn', mens
>>> $_SESSION[ navn] er noget vrøvl - med mindre du har assignet et eller andet
>>> til navn.
>> Ovenstående er faktisk fuldstændig ens... begge returner det samme.
>> At så syntax highlightning bliver meget pænere med 'navn' versionen er
>> så noget helt andet.
>
> Forudsætningen er, at navn så ikke er en konstant.
>
> Man "kan" også godt fx skrive:
>    print hej;
> Men først bliver hej betragtet som en konstant. Idet denne konstant
> ikke findes, bliver det så efterfølgende betragtet som en streng (og
> udløser evt. en passende notice)
>

Vidste faktisk ikke den ledte videre i scopet :)

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste