Avatar billede Slettet bruger
30. oktober 2004 - 13:56 Der er 16 kommentarer

$config variabel bliver på mystiskvis eksporteret til $_SESSION

Jeg ud fører denne kode:

error_reporting(E_ALL);
session_start();

$config['test2'] = 'test12';
$config['test1'] = 'test1';
$config['test'] = 'test';
$config['theme'] = 'dims';
$config['theme']['name'] = 'dims_test';
print_r($_SESSION);

/*
* Her sker der sjove ting og sager
*/
if(isset($_SESSION['config1']['THEME'])){
    $config['theme']['name'] = $_SESSION['config']['THEME'];
} else {
    $_SESSION['config']['THEME'] = $config['theme']['name'];
}
echo '<br>';
print_r($_SESSION);
show_source(__FILE__);
?>

på mystisk vis, kommet $config ind under $_SESSION['config'] EFTER scriptet er udført.

som i kan se første gang siden bliver vist er der ikke noget i session array'et, og jeg dumper det ved koden start og slut, og anden gang man så opdetere siden er $config havnet i $_SESSION['config']

se hvad der sker her http://test.sublife.dk/test.php

meget kritisk fejl, svar ASAP ville være meget behjælpeligt :-)
Avatar billede Slettet bruger
30. oktober 2004 - 13:59 #1
Rettelse:
if(isset($_SESSION['config1']['THEME'])){

skal være
if(isset($_SESSION['config']['THEME'])){
Avatar billede hmortensen Nybegynder
30. oktober 2004 - 14:45 #2
Hvad er det der er så mærkeligt ?
Du sætter jo sessionen her:
$_SESSION['config']['THEME'] = $config['theme']['name'];
Avatar billede detox Nybegynder
30. oktober 2004 - 16:57 #3
Det kommer sig nok af at du først sætter $config['theme'] til et et-dimensionelt array og derefter til et fler-dimensionelt. Hvis du fx laver det sådan her virker det:

error_reporting(E_ALL);
session_start();

$config['test2'] = 'test12';
$config['test1'] = 'test1';
$config['test'] = 'test';
$config['theme'][0] = 'dims';
$config['theme']['name'] = 'dims_test';
print_r($_SESSION);

/*
* Her sker der sjove ting og sager
*/
if(isset($_SESSION['config']['THEME'])){
    $config['theme']['name'] = $_SESSION['config']['THEME'];
} else {
    $_SESSION['config']['THEME'] = $config['theme']['name'];
}
echo '<br>';
print_r($_SESSION);
show_source(__FILE__);
?>
Avatar billede detox Nybegynder
30. oktober 2004 - 17:01 #4
Det svarer lidt til du først giver en variabel en værdi og derefter laver den samme variabel til et array. Det kan man ikke:

<?
error_reporting(E_ALL);
$var = 1;
$var[0] = 2;
print_r($var);
?>
Avatar billede Slettet bruger
30. oktober 2004 - 19:36 #5
det tror jeg nu ikke... jeg overskriver sådan set bare inholdet med et array, men det er nu ikke det der er problemet.... det er det at hele arrayet havner i $_SESSION
Avatar billede detox Nybegynder
30. oktober 2004 - 20:27 #6
Jeg tror nu alligevel du vil finde at det er fejlen, hvordan vil du ellers forklare at det virker, hvis du retter:

$config['theme'] = 'dims';

til:

$config['theme'][0] = 'dims';

eller helt udelader linjen?
Du skal huske på at:

$config['theme'] = 'dims';

svarer til:

$config = array('theme' => 'dims');

og:

$config['theme']['name'] = 'dims_test';

svarer til:

$config = array('theme' => array('name' => 'dims_test'));

Hvilket viser hvorfor du ikke først kan dimensionere et array til en dimension og derefter til en anden dimension.
Avatar billede detox Nybegynder
30. oktober 2004 - 20:31 #7
I øvrigt er problemet jo ikke kun at hele arrayet havner i sessionen, men osse at:
$config['theme']['name'] får værdien: 'd' og ikke 'dims', som den bliver tildelt.
Avatar billede detox Nybegynder
30. oktober 2004 - 20:31 #8
eller rettere: 'dims_test'.
Avatar billede Slettet bruger
30. oktober 2004 - 22:56 #9
detox, du har mange gode ideér hva?

har selv fundet fejlen, problemet var at jeg havde overset at register_globals var On. hvilket jeg tog som en selfølge var slået fra.
Avatar billede detox Nybegynder
30. oktober 2004 - 23:06 #10
Det har intet med register_globals at gøre. Resultatet er det samme med register_globals = Off.
Avatar billede detox Nybegynder
30. oktober 2004 - 23:07 #11
Hvilket jo osse fremgår af dit link, der stadig giver den forkerte værdi: 'd'.
Avatar billede Slettet bruger
30. oktober 2004 - 23:13 #12
Jeg er ked af at skuffe dig, men som du sikkert har regnet ud er det kun en test, og jeg er ligeglad med den værdi, efter jeg slog register_globals fra virker det perfekt. grundet at da register globals var slået til resulterede det i at første gang scriptet blev kørt blev $config defineret som config, og anden var $_SESSION['config'] defineret, og når register global er slået kommer $config til at referer til $_SESSION['config'], når man så smidere mere data i kommer det automatisk i session variablen..
Avatar billede detox Nybegynder
30. oktober 2004 - 23:20 #13
Det har du fuldkommen ret i, men det ændrer ikke ved det faktum at du ikke må tildele den samme variabel både en og flere dimensioner. Det giver et forkert resultat og virker derfor ikke perfekt.
Avatar billede Slettet bruger
30. oktober 2004 - 23:27 #14
er det ikke ret lige gyldigt, hvis jeg er kommet til at lave en fejl i mit eksempel, da jeg ikke mente det var hensynmæssigt, at skulle afsløre alt hvad der stod i min $config variabel, så som mysql login informationer? og det gik heller ikke hvis jeg ikke havde defineret $config['theme']['name'] vel? :-p
Avatar billede detox Nybegynder
30. oktober 2004 - 23:36 #15
Jo, så er det mig der har misforstået problemet.
Anyway, så viser det noget om, hvor bøvlet det kan være at have register_globals = On.
Avatar billede Slettet bruger
30. oktober 2004 - 23:59 #16
You got that right! ikke kun en sikkerheds risiko, men også en "pain in the ass"
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester