[PHP] Sessions worden niet onthouden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
Dag iedereen,

ben nu bezig met een systeempje voor een fietsen reserverings maar hij moet wat sessions onthouden, en dat wil niet lukken.

Ik registreer twee sessions op dezelfde manier:

code:
1
2
3
4
5
6
7
8
9
<?
$generated_key = generate_unique_key();
$_SESSION['personal_key'] = $generated_key;

/* en */

$boekid = $_GET['id'];
$_SESSION[$boekid] = $_GET['aantal'];
?>


Ik return meteen de array $_SESSIONS en krijg dan het volgende te zien:

code:
1
2
3
4
5
6
array(2) {
  ["personal_key"]=>
  string(51) "UJNcfZMxoWnsQJavzvHR9nBPEEPkSc3Lg4wNieQAb3Q4qlWqefI"
  [3]=>
  &string(1) "6"
}


Werkt goed dus. Het probleem is nu dat wanneer ik naar een andere pagina ga, hij de 2e key niet onthoud:

code:
1
2
3
4
array(1) {
  ["personal_key"]=>
  &string(51) "UJNcfZMxoWnsQJavzvHR9nBPEEPkSc3Lg4wNieQAb3Q4qlWqefI"
}


Heel erg raar. Ik snap niet hoe dat kan :/ session_start() etc. staat wel bovenaan, heeft iemand enig idee hoe dit kan :X

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

wat zit er in $boekid, want zo te zien is dit een lege variabele en dus wordt die niet mee genomen als sessievariabele ;)

Acties:
  • 0 Henk 'm!

  • Thomasje
  • Registratie: Augustus 2002
  • Laatst online: 29-05-2024

Thomasje

Semacode

Gebruik eens het volgende om de sessie aan te maken
PHP:
1
session_register("boekid");


Wat je nu doet is volgens mij alleen een array aanmaken

[ Voor 29% gewijzigd door Thomasje op 15-12-2004 13:08 ]


Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
$book_id is gewoon een getal.. in dit geval dus '3'.. Hij wordt wél geset:

code:
1
2
3
4
5
6
array(2) {
  ["personal_key"]=>
  string(51) "UJNcfZMxoWnsQJavzvHR9nBPEEPkSc3Lg4wNieQAb3Q4qlWqefI"
  [3]=>
  &string(1) "6"
}


Zoals je ziet zijn er 2 sessions gezet:

1: personal_key met de inhoud: UJNcfZMxoWnsQJavzvHR9nBPEEPkSc3Lg4wNieQAb3Q4qlWqefI ;)

2: '3' met de inhoud: 6

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Ik denk niet dat dat opgaat. Personal_key wordt immers wel onthouden.

Ik denk dat het hier de mist ingaat door brak php (en dan bedoel ik hetgeen je bij php.net kunt downloaden). Het gaat waarschijnlijk mis omdat er indexed en associatieve arrays worden gebruikt. Waarschijnlijk werkt het wel als je er voor zorgt dat je niet een nummer, maar een string gebruikt als sleutel. Zet een s$_SESSION['boek'.$boekid] neer ipv alleen $boekid.

Sowieso kan het een legacy dingetje zijn. Waneer alle sessie variabelen door register global in de scope gezet worden zou er een $3 worden geintroduceerd. En variabelenamen mogen nu eenmaal niet met een cijver beginnen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

PHP:
1
2
  [3]=>
  &string(1) "6"
Ik zie het nu pas, die string is een reference zo te zien, wellicht dat dat niet goed gaat met een session :)

Samen met wat Janoz hierboven zegt dat '3' niet kan als sessie variabele. Voor je applicatie lijkt het wel een array, maar zo wordt die niet opgeslagen afaik maar als losse variabele.

Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
Thomasje schreef op woensdag 15 december 2004 @ 13:07:
Gebruik eens het volgende om de sessie aan te maken
PHP:
1
session_register("boekid");


Wat je nu doet is volgens mij alleen een array aanmaken
Geprobeerd, en dat werkt wel.. Het enige is dat ik wil dat de key een nummer is. Ik wil dus dat de key '3' is bijvoorbeeld. Het lukt namelijk wel met strings, maar niet met getallen, erg vreemd!

Wat ik ook heb geprobeerd is dit:

PHP:
1
2
3
$bike_id = $_GET['id'];
${$bike_id} = $_GET['aantal'];
session_register("{$bike_id}");


Dat had hetzelfde effect als de session zetten via $_SESSION[], maar ook onthoud hij het niet!

Wat ik dus ervaren heb, is dat hij bij getallen als key niet onthoud (integers) maar met woorden wel (strings) :(

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

  • Thomasje
  • Registratie: Augustus 2002
  • Laatst online: 29-05-2024

Thomasje

Semacode

Is het nou niet gewoon dat hij zijn sessie verkeerd aanmaakt?

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Thomasje schreef op woensdag 15 december 2004 @ 13:15:
Is het nou niet gewoon dat hij zijn sessie verkeerd aanmaakt?
nee, want je sessie werkt toch gewoon?

Acties:
  • 0 Henk 'm!

  • Thomasje
  • Registratie: Augustus 2002
  • Laatst online: 29-05-2024

Thomasje

Semacode

Zenda schreef op woensdag 15 december 2004 @ 13:14:
[...]


Geprobeerd, en dat werkt wel.. Het enige is dat ik wil dat de key een nummer is. Ik wil dus dat de key '3' is bijvoorbeeld. Het lukt namelijk wel met strings, maar niet met getallen, erg vreemd!

Wat ik ook heb geprobeerd is dit:

PHP:
1
2
3
$bike_id = $_GET['id'];
${$bike_id} = $_GET['aantal'];
session_register("{$bike_id}");


Dat had hetzelfde effect als de session zetten via $_SESSION[], maar ook onthoud hij het niet!

Wat ik dus ervaren heb, is dat hij bij getallen als key niet onthoud (integers) maar met woorden wel (strings) :(
Die {} zijn volgens mij niet helemaal goed. Is toch geen probleem om een getal op te slaan in een sessie

[ Voor 4% gewijzigd door Thomasje op 15-12-2004 13:18 ]


Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
Janoz, good thinking, daar moet het wel aan liggen idd :) erg bedankt!

Heb er nu gewoon "book_<id nummer>" van gemaakt en dat onthoud hij wel.. ik str_replace() dat woordt er wel steeds uit (of via regex) als ik de key nodig heb bij een foreach() :)

Nogmaals bedankt!

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
Aan Thomasje:

Dat werkt wel hoor :) Alleen had hij hetzelfde effect.. Het is ook geen probleem om een getal op te slaan in een session, alleen mag het niet een getal zijn als session key..

[ Voor 45% gewijzigd door Zenda op 15-12-2004 13:20 ]

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

  • Thomasje
  • Registratie: Augustus 2002
  • Laatst online: 29-05-2024

Thomasje

Semacode

Zenda schreef op woensdag 15 december 2004 @ 13:19:
Aan Thomasje:

Dat werkt wel hoor :) Alleen had hij hetzelfde effect..
OK, ik hoop dat het verder allemaal lukt.
Pagina: 1