koekjesbakken.php
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
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
<?
/**
* Schrijf cookie
* @note als setcookie() met Same-Site attribuut
* @param string $sNaam
* @param string $sInhoud
* @param int $iLevensduur in seconden
* @return void
*/
function schrijfCookie(string $sNaam, string $sInhoud, int $iLevensduur) {
header('Set-Cookie: '
. urlencode($sNaam) . '=' . urlencode($sInhoud)
. '; Max-Age=' . ((string) abs($iLevensduur))
// . '; Domain=' // optioneel, default is huidige domein
. '; Path=/'
. ((isset($_SERVER['HTTPS']) and $_SERVER['HTTPS'] !== 'off')
? '; Secure' // FF negeert dit bij HTTP, IE11 niet
: ''
)
. '; HttpOnly'
. '; SameSite=Strict');
}
/**
* Wis cookie
* @return void
*/
function wisCookie(string $sNaam, string $sInhoud) {
// wis evt. cookie in browser
if (!headers_sent()) {
$sCookie = sprintf(' %s=', urlencode($sNaam));
$sCookieInh = sprintf('%s%s;', $sCookie, urlencode($sInhoud));
$bCookie = FALSE;
$aCookie = []; // andere cookies
foreach (headers_list() as $sHeader) {
if (0 !== stripos($sHeader, 'Set-Cookie:')) {continue;}
if (11 === strpos($sHeader, $sCookie, 11)) {
$bCookie = TRUE;
if (11 !== strpos($sHeader, $sCookieInh, 11)) {$aCookie[] = $sHeader;}
} else {$aCookie[] = $sHeader;}
}
if ($bCookie) {
header_remove('Set-Cookie'); // niet vervangen, alle cookies sturen
foreach ($aCookie as $sHeader) {header($sHeader, FALSE);}
}
else {$this->schrijfCookie($sNaam, '', 0);} // 0 = tot browser sluit
}
}
/**
* Schrijf cookie
* @note als setcookie() met Same-Site attribuut
* @param string $sNaam
* @param string $sInhoud
* @param int $iLevensduur in seconden
* @return void
*/
function schrijfCookie(string $sNaam, string $sInhoud, int $iLevensduur) {
header('Set-Cookie: '
. urlencode($sNaam) . '=' . urlencode($sInhoud)
. '; Max-Age=' . ((string) abs($iLevensduur))
// . '; Domain=' // optioneel, default is huidige domein
. '; Path=/'
. ((isset($_SERVER['HTTPS']) and $_SERVER['HTTPS'] !== 'off')
? '; Secure' // FF negeert dit bij HTTP, IE11 niet
: ''
)
. '; HttpOnly'
. '; SameSite=Strict');
}
/**
* Wis cookie
* @return void
*/
function wisCookie(string $sNaam, string $sInhoud) {
// wis evt. cookie in browser
if (!headers_sent()) {
$sCookie = sprintf(' %s=', urlencode($sNaam));
$sCookieInh = sprintf('%s%s;', $sCookie, urlencode($sInhoud));
$bCookie = FALSE;
$aCookie = []; // andere cookies
foreach (headers_list() as $sHeader) {
if (0 !== stripos($sHeader, 'Set-Cookie:')) {continue;}
if (11 === strpos($sHeader, $sCookie, 11)) {
$bCookie = TRUE;
if (11 !== strpos($sHeader, $sCookieInh, 11)) {$aCookie[] = $sHeader;}
} else {$aCookie[] = $sHeader;}
}
if ($bCookie) {
header_remove('Set-Cookie'); // niet vervangen, alle cookies sturen
foreach ($aCookie as $sHeader) {header($sHeader, FALSE);}
}
else {$this->schrijfCookie($sNaam, '', 0);} // 0 = tot browser sluit
}
}