[php] array in een sessie wordt niet onthouden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Voor een script dat een directory uitleest wil ik de bestanden in een sessie-array plaatsen, zodat niet steeds opnieuw de directory hoeft te worden uitgelezen.

Het idee is vrij simpel: ik plaats de bestanden van een bepaalde directory in een array. Die array wordt als geheel weer in een array geplaatst, met als key het realpath van de map die opgeroepen is. Die laatste array is de sessie-array.

Wanneer nu deze sessie-array al de key met het realpath bevat, hoeft niet opnieuw de directory doorlopen te worden. Het script doet hier nu bij een stuk of 20 bestanden al merkbaar even over.

Het maffe is dat het nu niet werkt. De simpele test hiervoor is print_r zowel voor al na het uitlezen; hieruit volgt dat de sessie-variabele domweg niet onthouden is.

Is er soms een beperking aan het opnemen van arrays in sessions??


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//mbv realpath een sleutel voor arrays instellen
$echte_dir_sleutel = realpath ($startdirectory);

//huidige inhoud $_SESSION['echte_dir']
echo "<hr />";
print_r($_SESSION['echte_dir']);
echo "<hr />";

//eerst alle directories onder de huidige directory in de array 'directories' zetten
if (!array_key_exists($echte_dir_sleutel,$_SESSION['echte_dir'])) {
 //if (!isset($_SESSION['directories'])) {
  $diroverzicht = array();  
  //$_SESSION['directories'] = array();
    if ($handle = opendir($startdirectory)) {
      while (false !== ($file = readdir($handle))) {
            if ($file <> "." and $file <>".." and is_dir($startdirectory.$file)) {array_push ($diroverzicht,$file); }
    }
  }
  $_SESSION['echte_dir'][$echte_dir_sleutel] = $diroverzicht;
}

//huidige inhoud $_SESSION['echte_dir'];
echo "<hr />";
print_r($_SESSION['echte_dir']);
echo "<hr />";

Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
Ik weet niet of dit je complete code is, maar anders is het misschien verstandig om aan het begin van je script session_start() aan te roepen, anders kun je de $_SESSION variabele blijven vullen totdat je een ons weegt gok ik!

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Borizz schreef op zondag 20 april 2008 @ 19:10:
Ik weet niet of dit je complete code is, maar anders is het misschien verstandig om aan het begin van je script session_start() aan te roepen, anders kun je de $_SESSION variabele blijven vullen totdat je een ons weegt gok ik!
Had ik even moeten vermelden, maar session_start() wordt wel degelijk aangeroepen.

Onderstaande code werkt wel bijv. Mag ik soms alleen maar numerieke waarden als key kiezen?

PHP:
1
2
3
4
5
6
7
8
9
10
//testje
if (!isset($_SESSION['test_mark'])) {
    $array_test = array(1, 1, 1, 1,  1, 8 => 1,  4 => 1, 19, 3 => 13);
    $array_test2 = array(3, 5, 7, 7,  3, 8 => 1,  4 => 1, 19, 3 => 13);
    $array_test[4] = $array_test2; 
    $_SESSION['test_mark'] = $array_test;
    
    echo "Nog niet ingesteld!";
}
echo "<p>".print_r($_SESSION['test_mark'])."</p>";

Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
Misschien wordt $_SESSION['echte_dir'] nog ergens ge-unset of iets dergelijks, probeer je script eens apart te runnen (uiteraard met session_start() erboven). Verder lijkt het me nogal onlogisch om deze data in een sessie te cachen, want de bestanden in de directory $startdirectory, zullen voor iedereen gelijk zijn (mits de waarde in $startdirectory gelijk is dan). Je kan dit dan beter in een bestand of database opslaan lijkt mij.

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • !null
  • Registratie: Maart 2008
  • Laatst online: 20-09 20:32
Verder moet je even controleren of session_start() wel wordt aangeroepen voordat er ook maar iets wordt ge-output. Dus echt letterlijk als allereerst doen.

Ampera-e (60kWh) -> (66kWh)


Acties:
  • 0 Henk 'm!

  • Kwastie
  • Registratie: April 2005
  • Laatst online: 19-09 10:42

Kwastie

Awesomeness

dit is duidelijk een session_start probleem, dit zijn van die vervelende dingen waar je niet altijd direct aan denkt. Heb het zelf ook wel eens gehad, gewoon simpel weg gegeven, je krijg ook geen error message, waardoor je het dus niet direct door hebt. 8)

When I get sad i stop being sad and be awesome instead


Acties:
  • 0 Henk 'm!

  • !null
  • Registratie: Maart 2008
  • Laatst online: 20-09 20:32
Ook even error_reporting(E_ALL) bovenaan zetten, als dat niet al standaard geconfigureerd staat.

Ampera-e (60kWh) -> (66kWh)


Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Nu online

Gonadan

Admin Beeld & Geluid, Harde Waren
Vroegâh moet je altijd serialize() gebruiken voordat je een array in een sessie stopte, ik moet even nakijken of dat nog steeds zo is maar volgens mij kan je daar een heel eind mee komen. :)

Je kunt sowieso even print_r($_SESSION) doen om te kijken of de sessie überhaupt wel bestaat, en zo niet dan staat het antwoord hier zo'n tig ker boven. ;)

[ Voor 34% gewijzigd door Gonadan op 21-04-2008 10:47 ]

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

  • Mental
  • Registratie: Maart 2000
  • Laatst online: 20-10-2020
probeer anders je array te serializen voordat je hem opslaat in je sessie.

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Gonadan schreef op maandag 21 april 2008 @ 10:45:
Vroegâh moet je altijd serialize() gebruiken voordat je een array in een sessie stopte, ik moet even nakijken of dat nog steeds zo is maar volgens mij kan je daar een heel eind mee komen. :)

Je kunt sowieso even print_r($_SESSION) doen om te kijken of de sessie überhaupt wel bestaat, en zo niet dan staat het antwoord hier zo'n tig ker boven. ;)
Dat was dan heeeeeeel vroeger. zo vroeg dat ik het me niet eens kan herinneren. En ik werk toch al met PHP sinds PHP3 .

Maar goed, misschien heb ik het verdrongen of nooit gerealiseerd 8)7 IIG nu kan het wel :D

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Nu online

Gonadan

Admin Beeld & Geluid, Harde Waren
LuCarD schreef op maandag 21 april 2008 @ 10:48:
Dat was dan heeeeeeel vroeger. zo vroeg dat ik het me niet eens kan herinneren. En ik werk toch al met PHP sinds PHP3 .

Maar goed, misschien heb ik het verdrongen of nooit gerealiseerd 8)7 IIG nu kan het wel :D
Ok, dan denk ik dat het inderdaad aan het starten van de sessie ligt.

@TS:
Wat geeft de volgende code?
PHP:
1
echo '<pre>'.ini_get('session.auto_start').PHP_EOL.print_r($_SESSION, true).'</pre>';

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Weet je wel zeker dat de if statement op regel 16 klopt?

Als de startdirectory geen directory separator heeft aan het eind dan werkt de de is_dir functie niet!


probeer dit eens.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//mbv realpath een sleutel voor arrays instellen
$echte_dir_sleutel = realpath ($startdirectory);

//huidige inhoud $_SESSION['echte_dir']
echo "<hr />";
print_r($_SESSION['echte_dir']);
echo "<hr />";

//eerst alle directories onder de huidige directory in de array 'directories' zetten
if (!array_key_exists($echte_dir_sleutel,$_SESSION['echte_dir'])) {
 //if (!isset($_SESSION['directories'])) {
  $diroverzicht = array();  
  //$_SESSION['directories'] = array();
    if ($handle = opendir($startdirectory)) {
      while (false !== ($file = readdir($handle))) {
echo "<br>file: " . $startdirectory.$file ." "; echo is_dir($startdirectory.$file)?"dir":"file";  
            if ($file <> "." and $file <>".." and is_dir($startdirectory.$file)) {array_push ($diroverzicht,$file); }
    }
  }
  $_SESSION['echte_dir'][$echte_dir_sleutel] = $diroverzicht;
}

//huidige inhoud $_SESSION['echte_dir'];
echo "<hr />";
print_r($_SESSION['echte_dir']);
echo "<hr />";

[ Voor 75% gewijzigd door LuCarD op 21-04-2008 11:09 ]

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

Verwijderd

Je kunt, bij mijn weten, geen array's in sessies stoppen zonder deze te serializen.
http://nl2.php.net/serialize - Serialize de array
Plaats de sessie
http://nl2.php.net/manual/en/function.unserialize.php - Unserialize de array

Zo moet het werken. Succes!

Acties:
  • 0 Henk 'm!

  • RAJH
  • Registratie: Augustus 2001
  • Niet online
session_register() accepts a variable number of arguments, any of which can be either a string holding the name of a variable or an array consisting of variable names or other arrays. For each name, session_register() registers the global variable with that name in the current session.

You can also create a session variable by simply setting the appropriate member of the $_SESSION or $HTTP_SESSION_VARS (PHP < 4.1.0) array.
Dus een array toevoegen aan je sessie werkt gewoon :)

Acties:
  • 0 Henk 'm!

  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

Verwijderd schreef op maandag 21 april 2008 @ 16:02:
Je kunt, bij mijn weten, geen array's in sessies stoppen zonder deze te serializen.
http://nl2.php.net/serialize - Serialize de array
Plaats de sessie
http://nl2.php.net/manual/en/function.unserialize.php - Unserialize de array

Zo moet het werken. Succes!
Je kan wel degelijk array's in je sessie stoppen.

Maak gewoon eens een testscript:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php

    session_start() ;

    print_r($_SESSION) ;
    
    $shabba = array(1, 2, 3) ;
    
    $_SESSION['bla'] = $shabba ;

?>
Werkt dit: ja/nee. Ja: ligt dus niet aan de sessies maar iets anders in je script. Nee: je PHP is stuk. :+

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


Acties:
  • 0 Henk 'm!

Verwijderd

Hmm, vreemd. Ik kan me herinneren dat ik ooit ook eens zo'n soortgelijk probleem heb gehad en volgens mij had ik dat toen had opgelost met serialize.

Trouwens, je kunt ook kijken of er een sessie gestart is door te kijken of session_id() een waarde bevat, is die leeg? Dan is je sessie dus niet (goed) gestart.

[ Voor 3% gewijzigd door Verwijderd op 21-04-2008 17:24 ]


Acties:
  • 0 Henk 'm!

  • daniëlpunt
  • Registratie: Maart 2004
  • Niet online

daniëlpunt

monkey's gone to heaven

L4m0r schreef op maandag 21 april 2008 @ 10:46:
probeer anders je array te serializen voordat je hem opslaat in je sessie.
En de unserializen als je em weer uit de sessie ophaalt. ;) Ook niet onbelangrijk.
Pagina: 1