Cookie wordt niet geplaatst
ik ben bezig met een PHP script.
waarbij een gebruiker in een input field zijn naam kan invullen.
door op een button te clicken wordt de naam opgeslagen in een COOKIE.
als deze COOKIE als bestaad.
dan krijg je als output: echo "Welcome terug ".$_COOKIE['name'];
bestaad de COOKIE nog niet dan word er een COOKIE aangemaakt.
en dan krijg je de volgende outut: echo "Hallo ".$_COOKIE['name']; echo " Dit is je eerste keer op deze website.";
maar ik krijg wat ik ook intyp altijd als output: echo "Welcome terug ".$_COOKIE['name'];
ook al bestaad deze COOKIE nog niet.
Hier is mijn source code:
Quote:
Quote:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
if(!empty($_POST))
{
header("Location:form_data.php");
setcookie('name',$_POST['name'], time() + (86400 * 30));
}
if(isset($_COOKIE['name']))
{
echo "Welcome terug ".$_COOKIE['name'];
}else
{
echo "Hallo ".$_COOKIE['name']; echo " Dit is je eerste keer op deze website.";
setcookie('name',$_POST['name'], time() + (86400 * 30));
}
?>
if(!empty($_POST))
{
header("Location:form_data.php");
setcookie('name',$_POST['name'], time() + (86400 * 30));
}
if(isset($_COOKIE['name']))
{
echo "Welcome terug ".$_COOKIE['name'];
}else
{
echo "Hallo ".$_COOKIE['name']; echo " Dit is je eerste keer op deze website.";
setcookie('name',$_POST['name'], time() + (86400 * 30));
}
?>
kan iemand mij helpen met mij probleem?
-Jordi
Gewijzigd op 22/03/2018 19:50:37 door - Ariën -
Jordi timmerman op 22/03/2018 19:32:34:
maar ik krijg wat ik ook intyp altijd als output: echo "Welcome terug ".$_COOKIE['name'];
Als er iets is ingetypt is er dus een POST en set jij direct een cookie.
Dus is het logisch dat er dan een cookie is.
Na een setcookie() zal $_COOKIE nooit direct je waarde kunnen hebben.
Met sessies kan dit overigens wel.
Verder heb ik een tipje: Het is niet nodig om elke regel te echo'en. Je kan prima gewoon in je HTML je PHP-tags openen en sluiten, of het geheel tussen single-quotes plaatsen. Het scheelt dan tevens de escaping met de slashes.
Gewijzigd op 22/03/2018 19:50:12 door - Ariën -
- SanThe - op 22/03/2018 19:44:58:
Als er iets is ingetypt is er dus een POST en set jij direct een cookie.
Dus is het logisch dat er dan een cookie is.
Jordi timmerman op 22/03/2018 19:32:34:
maar ik krijg wat ik ook intyp altijd als output: echo "Welcome terug ".$_COOKIE['name'];
Als er iets is ingetypt is er dus een POST en set jij direct een cookie.
Dus is het logisch dat er dan een cookie is.
maar je moet toch eerst een COOKIE maken
en dan kijken of die al bestaat?
anders werkt het niet.
En na Hallo staat geen naam omdat $_COOKIE['name'] niet bestaat.
Je krijgt daar eerder een notice op.
setcookie() <-- lees de documentatie). Als je dus naar een andere directory navigeert op dezelfde website is dat cookie dan ook niet geldig.
Ook is het een misvatting dat een header('Location: ...') je meteen transporteert naar een andere pagina. Dit gebeurt pas nadat het hele script is afgedraaid. Meestal is het de bedoeling dat er direct wordt geredirect, daartoe is het dan ook gebruikelijk om direct een exit; achter header('Location: ...') te zetten. Maar in jouw code is om te beginnen de volgorde dus al verkeerd (of op zijn minst raar): éérst set je een cookie, en dan redirect je pas, en niet andersom.
En dan is het onlogisch dat je ergens midden in het uitdraaien van je pagina nogmaals een cookie instelt, ook is het dan niet gegarandeerd dat $_POST bestaat... Het beste kun je het verwerken van het formulier in een aparte stap behandelen en daarna wordt je -zonder het genereren van wat voor output dan ook- doorgestuurd naar een andere pagina.
Je stelt ook geen pad in bij het instellen van je cookie (vierde parameter van Ook is het een misvatting dat een header('Location: ...') je meteen transporteert naar een andere pagina. Dit gebeurt pas nadat het hele script is afgedraaid. Meestal is het de bedoeling dat er direct wordt geredirect, daartoe is het dan ook gebruikelijk om direct een exit; achter header('Location: ...') te zetten. Maar in jouw code is om te beginnen de volgorde dus al verkeerd (of op zijn minst raar): éérst set je een cookie, en dan redirect je pas, en niet andersom.
En dan is het onlogisch dat je ergens midden in het uitdraaien van je pagina nogmaals een cookie instelt, ook is het dan niet gegarandeerd dat $_POST bestaat... Het beste kun je het verwerken van het formulier in een aparte stap behandelen en daarna wordt je -zonder het genereren van wat voor output dan ook- doorgestuurd naar een andere pagina.
Gewijzigd op 22/03/2018 20:13:48 door Thomas van den Heuvel
Code (php)
1
2
3
4
2
3
4
public static function setCookie($key,$value,$days = 365,$secure = null,$httponly = true){
setcookie($key,$value,$days ? time() + $days * 86400 : 0,'/','',$secure === null ? self::secure() : $secure,$httponly);
$_COOKIE[$key] = $value;
}
setcookie($key,$value,$days ? time() + $days * 86400 : 0,'/','',$secure === null ? self::secure() : $secure,$httponly);
$_COOKIE[$key] = $value;
}
Is ie daarna ook meteen in de $_COOKIE bekend. Niet iedereen zal hiervan gecharmeerd zijn ("Gij zult geen SuperGlobals aanraken!"), maar daarna is de situatie wel zoals je verwacht.
Voor de volledigheid: dit zit allemaal in een "Helper class", dus die self::secure() is: