[PHP] Cookie-gegevens worden niet vastgehouden

Pagina: 1
Acties:

Onderwerpen


  • Joen
  • Registratie: Juli 2003
  • Laatst online: 09-08 18:34
Geachte mede freaks,

Na een tijdje er mee egstopt te zijn (om o.a. te leren de superglobals consequent te gebruiken en uit te zoeken of het aanmaken van cookies nog steeds met setcookie() gemaakt moeten/kunnen worden) ben ik dan toch maar weer aan de slag gegaan met cookies.

Het rare probleem heb ik nu dat als ik het browservenster sluit en later de pagina in een nieuw browservenster weer heropen dat de gegevens dan niet opvraagbaar zijn. De gegevens zijn dus dan "ineens" verdwenen. Wanneer ik de pagian later in het zelfde venster opnieuw opvraag gata het wel goed, Puur alleen na het opnieuw starten van de browser speelt het dus.

Nu zou je denken: ja, jij hebt geen experiation time opgegeven. Maar dat is het nu juist, dat heb ik WEL opgegeven: een expiration time van een jaar om precies te zijn.

Dit is mijn oorspronkelijke code (de variabelen kloppen):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php 
if($_POST["onthouden"]==1){ 
    echo "onthoudt"; 
    setcookie("onthoudincookie","1",time()+60*60*24*365,"/reageer/"); 
    setcookie("naamincookie",$_POST["reactienwnaam"],time()+60*60*24*365,"/reageer/"); 
    setcookie("emailincookie",$_POST["reactienwemail"],time()+60*60*24*365,"/reageer/"); 
    setcookie("emailweergaveincookie",$_POST["reactienwemailweergave"],time()+60*60*24*365,"/reageer/"); 
    setcookie("websiteincookie",$_POST["reactienwwebsite"],time()+60*60*24*365,"/reageer/"); 
} 
else{ 
    setcookie("onthoudincookie"); 
    setcookie("naamincookie"); 
    setcookie("emailincookie"); 
    setcookie("emailweergaveincookie"); 
    setcookie("websiteincookie"); 
} 
?>

En dit heb ik ook nog geprobeerd, maar had als gevolg dat er maar 1 variabele met waarde voor even werd vastgehouden):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php 
if($_POST["onthouden"]==1){ 
    echo "onthoudt"; 
    setcookie("onthoudincookie","1"); 
    setcookie("naamincookie",$_POST["reactienwnaam"]); 
    setcookie("emailincookie",$_POST["reactienwemail"]); 
    setcookie("emailweergaveincookie",$_POST["reactienwemailweergave"]); 
    setcookie("websiteincookie",$_POST["reactienwwebsite"],time()+60*60*24*365,"/reageer/"); 
} 
else{ 
    setcookie("onthoudincookie"); 
    setcookie("naamincookie"); 
    setcookie("emailincookie"); 
    setcookie("emailweergaveincookie"); 
    setcookie("websiteincookie"); 
} 
?>

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 12:56
Mag je cookies nog na output setten? Heb je verder error reporting op E_ALL staan?

Verwijderd

PHP:
1
2
3
4
<?php
    ini_set('display_errors', 1);
    error_reporting(E_ALL);
?> 

Doe dat maar eens boven aan je php' file, en misschien gaat er wel een wereld voor je open :)

  • Joen
  • Registratie: Juli 2003
  • Laatst online: 09-08 18:34
Och jah, dom dat ik daar niet aan dacht ook ff te doen ;) :P

En idd, output mag niet voor een cookie geven, pas er na. Alleenw as dit regeltje puur om te debuggen....

  • Joen
  • Registratie: Juli 2003
  • Laatst online: 09-08 18:34
Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of fsockopen(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in C:\domains\website\inc\status.php on line 3

Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of fsockopen(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in C:\domains\website\inc\status.php on line 3

Notice: Undefined index: onthouden in C:\domains\website\reageer\reageer_hoofd.php on line 11
Dat krijg ik nu o.a. De rest zijn ook undefined indexes, wat op zich logisch daar ik geen isset 's gebruik.

Maar de voorwaarde moet toch blijven bestaan, dat alleen als er iets wordt versturud op de POST methode dat dan de cookie geschreven moet worden?

Verder begrijp ik niet echt wat die eerste warning inhoud, het betreft deze includeregel:
PHP:
1
2
3
<?php
include("../inc/config.php");
?>

[ Voor 4% gewijzigd door Joen op 13-11-2003 20:21 ]


  • Joen
  • Registratie: Juli 2003
  • Laatst online: 09-08 18:34
Och, jongens het spijt mij verschrikkelijk maar ik heb een hele stomme vergissing gemaakt. Gewoon een kwestie van een stomme beredenering...

Kijk:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
if($_POST["onthouden"]==1){
        echo "onthoudt";
        setcookie("onthoudincookie","1",time()+60*60*24*365,"/reageer/");
    setcookie("naamincookie",$_POST["reactienwnaam"],time()+60*60*24*365,"/reageer/");
    setcookie("emailincookie",$_POST["reactienwemail"],time()+60*60*24*365,"/reageer/");
    setcookie("emailweergaveincookie",$_POST["reactienwemailweergave"],time()+60*60*24*365,"/reageer/");
    setcookie("websiteincookie",$_POST["reactienwwebsite"],time()+60*60*24*365,"/reageer/");

}
else{
    setcookie("onthoudincookie");
    setcookie("naamincookie");
    setcookie("emailincookie");
    setcookie("emailweergaveincookie");
    setcookie("websiteincookie");
}
?>

Als ik nu iets POST naar het formulier en onthouden = 1 dan wordt de cookie bewaard. Normaliter zouhet vinkje om onthouden =1 te maken al ingevuld moet zijn, omdat dat in de cookie zo staat en dan zou de voorwaarde bij de volgende POSt weer gelden en zal de cookie geupdate worden.

Maar als de pagina geladen wordt, dan is dus natuurlijk het stukje bij de else aan de beurt en laat nu net zsijn dat dat de regels zijn die de cookie horen te verwijderen!

Ik denk dat de oplossing dus best simpel is: alleen de cookie verwijderen als het vinkje bij een POST wordt uitgezet en niet ook als de pagian geladen wordt.

Kan dit theoretisch de oplossing zijn?
Ik zal het iig even proberen ;)

  • Joen
  • Registratie: Juli 2003
  • Laatst online: 09-08 18:34
Yes, dat was het probleem. Kwestie van verkeerde condities stellen dus :P

Blijft nog steeds de vraag wat dit betekend (bij het includen van een bestand):
Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of fsockopen(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in C:\domains\website\inc\status.php on line 3
Pagina: 1