Cookie
Code (php)
krijg ik eerst als antwoord 'nee' en pas na 'verversen' als antwoord 'ja'.
Als ik daarna setcookie wijzig in 'setcookie('hulp','',time()-3600);' dan krijg ik na verversen eerst als antwoord 'ja' en na nogmaals verversen pas 'nee'.
Wil iemand mij dat uitleggen?
Bij het surfen naar jouw site stuurt de gebruiker de inhoud van die file mee naar de server, waar jouw php code wordt gedraaid.
Dat wordt meegegeven in de variabele $_COOKIE['hulp']
Als jij ondertussen, bij het afhandelen van de php code iets verandert aan de cookies, wordt die verandering wel uitgevoerd (de cookie file zal wel worden aangepast), maar die waarde wordt niet meer opnieuw opgestuurd, tijdens het afhandelen van de php code.
$_COOKIE['hulp'] heeft dus de waarde die ze had op het moment van het request. Pas na het verversen krijg je de nieuwe waarde in $_COOKIE['hulp'].
De code:
Code (php)
Afhankelijk van de voorwaarde wordt de link bepaald. Door het klikken op betreffende link wordt een menu-onderdeel gewijzigd. En dat is geen probleem.
Als de bezoeker later op de site komt wil ik echter dat ie de laatste instelling krijgt voorgeschoteld. Dus stond de link op AAN, dan is bij het nieuwe bezoek ook AAN...
Het lijkt zo simpel, maar toch blijf ik in een kringetje draaien...
Wil iemand me verder helpen?
Gewijzigd op 15/02/2011 10:30:24 door swaenie -
Na setcookie() ververs je zelf de pagina, met header('location: ...')
Code (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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?php
# Session starten.
session_start();
/*--------------------------------------------------------------------------------------------------------------------------
(§) Hulp Menu | Begin stand instellen.
--------------------------------------------------------------------------------------------------------------------------*/
# Kijken of $_SESSION['hulp'] al bestaat JA of NEE.
if(!isset($_SESSION['hulp'])){
/*---- INFO: Nee, $_SESSION['hulp'] bestaat nog niet. Deze gaan we nu aanmaken. ----*/
$_SESSION['hulp'] = true; // TRUE = Hulp menu AAN, FALSE = Hulp menu UIT.
}
/*--------------------------------------------------------------------------------------------------------------------------
(§) Hulp Menu | Hulp menu AAN of UIT zetten.
--------------------------------------------------------------------------------------------------------------------------*/
# Als eerste gaan we controleren of er een aanvraag is.
if(isset($_GET['hulp'])){
/*---- INFO: Ja, er is een aanvraag. ----*/
# Dan gaan we nu kijken of de bezoeker het hulp menu AAN of UIT wil zetten.
if($_GET['hulp'] == 'AAN'){
/*---- INFO: Er is een aanvraag om het hulp menu AAN te zetten. ----*/
# $_SESSION['hulp'] op TRUE zetten zodat het hulp menu wordt weergeven.
$_SESSION['hulp'] = true;
}
elseif($_GET['hulp'] == 'UIT'){
/*---- INFO: Er is een aanvraag om het hulp menu UIT te zetten. ----*/
# $_SESSION['hulp'] op FALSE zetten zodat het hulp menu niet meer wordt weergeven.
$_SESSION['hulp'] = false;
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
</head>
<body>
<?php
if($_SESSION['hulp']){
echo '<a href="?hulp=UIT">UIT</a>';
}
else{
echo '<a href="?hulp=AAN">AAN</a>';
}
?>
</body>
</html>
# Session starten.
session_start();
/*--------------------------------------------------------------------------------------------------------------------------
(§) Hulp Menu | Begin stand instellen.
--------------------------------------------------------------------------------------------------------------------------*/
# Kijken of $_SESSION['hulp'] al bestaat JA of NEE.
if(!isset($_SESSION['hulp'])){
/*---- INFO: Nee, $_SESSION['hulp'] bestaat nog niet. Deze gaan we nu aanmaken. ----*/
$_SESSION['hulp'] = true; // TRUE = Hulp menu AAN, FALSE = Hulp menu UIT.
}
/*--------------------------------------------------------------------------------------------------------------------------
(§) Hulp Menu | Hulp menu AAN of UIT zetten.
--------------------------------------------------------------------------------------------------------------------------*/
# Als eerste gaan we controleren of er een aanvraag is.
if(isset($_GET['hulp'])){
/*---- INFO: Ja, er is een aanvraag. ----*/
# Dan gaan we nu kijken of de bezoeker het hulp menu AAN of UIT wil zetten.
if($_GET['hulp'] == 'AAN'){
/*---- INFO: Er is een aanvraag om het hulp menu AAN te zetten. ----*/
# $_SESSION['hulp'] op TRUE zetten zodat het hulp menu wordt weergeven.
$_SESSION['hulp'] = true;
}
elseif($_GET['hulp'] == 'UIT'){
/*---- INFO: Er is een aanvraag om het hulp menu UIT te zetten. ----*/
# $_SESSION['hulp'] op FALSE zetten zodat het hulp menu niet meer wordt weergeven.
$_SESSION['hulp'] = false;
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
</head>
<body>
<?php
if($_SESSION['hulp']){
echo '<a href="?hulp=UIT">UIT</a>';
}
else{
echo '<a href="?hulp=AAN">AAN</a>';
}
?>
</body>
</html>
PS. Het gebruik van short tags "<?" is niet aan te raden. Dit wordt niet altijd ondersteund.
Gewijzigd op 15/02/2011 11:55:40 door - Mark -
offtopic: Zoals jij comentaar neer zet is echt fijn.
Ik ga het van je overnemen om het zo te schrijven.
:p Persoonlijk ben ik het met je eens maar niet iedereen zal die mening delen. Ik spring best grof in zullen we maar zeggen en daardoor wordt zelf een klein script best lang.
@chris
Met header('location: ...')kom ik in een loop...
@mark
Ik heb je script even geprobeerd, maar na herstarten van de browser kom ik weer in standaard opstartstand.
Ik ga het morgen even bestuderen.
Nogmaals bedankt voor je uitgebreide reactie.
Gewijzigd op 15/02/2011 22:57:28 door - Mark -
Code (php)
Mij gaat het dus alleen om het onthouden. En ik weet dat in dat geval cookies moeten zijn ingeschakeld. Ik wil voor dit doel echter geen inlogprocedure opstarten.
Toch bedankt.
En wat is het probleem nu?
Als de gebruiker 'het gebruik van cookies' heeft ingeschakeld, wordt zijn laatste keuze ook nog onthouden. Dat krijg ik echter niet voor elkaar. Er wordt altijd opgestart alsof er geen cookie is.
En welke code gebruik je nu precies bij het aanmaken van de cookie en het uitlezen van de cookie?
Kan je hier mee voort?
Code (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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?php
// controleren of de cookie moet veranderd worden
if (!empty($_GET['cookie'])) {
// zien of $_GET['hulp'] 0/false/null is of true/1/..
if (!empty($_GET['hulp'])) {
setcookie('hulp', 1, time()+3600);
}
else {
setcookie('hulp', 0, time()+3600);
}
// redirecten naar de file waar je bent
header('location: ?');
}
// cookies controleren
if (!empty($_COOKIE['hulp'])) {
// er is hulp gevraagd
$hulp = '
<p>Dit is het hulp hoekje ...</p>
<a href="?cookie=1&hulp=0">hulp uit</a>
';
}
else {
$hulp = ' <a href="?cookie=1&hulp=1">hulp aan zetten</a>';
}
echo html(
'<h3>Mijn titel</h3>
<div class="hulp">'. $hulp .'</div>
<p> bla bla</p>
'
);
function html($body) {
return '<html>
<head>
<style>
.hulp {
width: 200px;
float: right;
border: 1px solid #999999;
}
</style>
</head>
<body>
'. $body .'
</body>
</html>';
}
?>
// controleren of de cookie moet veranderd worden
if (!empty($_GET['cookie'])) {
// zien of $_GET['hulp'] 0/false/null is of true/1/..
if (!empty($_GET['hulp'])) {
setcookie('hulp', 1, time()+3600);
}
else {
setcookie('hulp', 0, time()+3600);
}
// redirecten naar de file waar je bent
header('location: ?');
}
// cookies controleren
if (!empty($_COOKIE['hulp'])) {
// er is hulp gevraagd
$hulp = '
<p>Dit is het hulp hoekje ...</p>
<a href="?cookie=1&hulp=0">hulp uit</a>
';
}
else {
$hulp = ' <a href="?cookie=1&hulp=1">hulp aan zetten</a>';
}
echo html(
'<h3>Mijn titel</h3>
<div class="hulp">'. $hulp .'</div>
<p> bla bla</p>
'
);
function html($body) {
return '<html>
<head>
<style>
.hulp {
width: 200px;
float: right;
border: 1px solid #999999;
}
</style>
</head>
<body>
'. $body .'
</body>
</html>';
}
?>
Gewijzigd op 16/02/2011 11:38:49 door Kris Peeters
@Elwin
De setcookie staat vermeld bij het openen dan dit draadje. Eigenlijk lijkt me de waarde van de cookie niet eens belangrijk. Ik wil alleen weten of ie al dan niet bestaat.
@Kris
Bedankt voor de uitgebreide code. Als cookies zijn ingeschakeld, dan schakelt ie goed tussen aan en uit. Ook onthoud ie de laatste keuze.
Als cookies echter zijn uitgeschakeld, dan is schakelen niet mogelijk..
Ik ga je code morgen eens verder bestuderen.
Nogmaals bedankt voor al jullie moeite.