dbxapp 4.1.3
CMS, Shop, Workflows und modulare Geschäftsanwendungen
Loading...
Searching...
No Matches
dbxSession_ephemeral_guest_test.php
Go to the documentation of this file.
1<?php
2
6
8 public int $uid = 0;
10
11 public function __construct() {
12 $this->browser = new dbxSessionEphemeralGuestTestBrowser();
13 }
14
15 public function user(): int {
16 return $this->uid;
17 }
18
19 public function get_system_obj(string $class) {
20 return $class === 'dbxBrowser' ? $this->browser : null;
21 }
22
23 public function debug(...$args): void {
24 }
25}
26
28
32}
33
34require_once dirname(__DIR__) . '/dbxSession.class.php';
35
36$fail = static function (string $message, int $code): void {
37 fwrite(STDERR, "FAIL: $message\n");
38 exit($code);
39};
40
42$_SERVER['REQUEST_METHOD'] = 'GET';
43$_COOKIE = array();
44
45dbx()->uid = 0;
46dbx()->browser->_robot = 1;
47if (!$session->is_ephemeral_anonymous_session_request(false)) {
48 $fail('Ein anonymer Robot ohne Session-Cookie wird nicht als fluechtig erkannt.', 1);
49}
50
51dbx()->browser->_robot = 0;
52if ($session->is_ephemeral_anonymous_session_request(false)) {
53 $fail('Ein normaler Gast ausserhalb des Full-Page-Caches wird verworfen.', 2);
54}
55if (!$session->is_ephemeral_anonymous_session_request(true)) {
56 $fail('Ein cookie-loser Gast auf einem sicheren Full-Page-Cache-Hit bleibt persistent.', 3);
57}
58
59$_COOKIE[session_name()] = 'existing-session-id';
60session_id('existing-session-id');
61if ($session->is_ephemeral_anonymous_session_request(true)) {
62 $fail('Eine vorhandene Cookie-Session wird auf einem Cache-Hit verworfen.', 4);
63}
64$_COOKIE[session_name()] = 'invalid-or-stale-session-id';
65if (!$session->is_ephemeral_anonymous_session_request(true)) {
66 $fail('Ein ungueltiger Session-Cookie umgeht die fluechtige Cache-Hit-Behandlung.', 5);
67}
68unset($_COOKIE[session_name()]);
69session_id('');
70
71dbx()->browser->_robot = 1;
72$_SERVER['REQUEST_METHOD'] = 'POST';
73if ($session->is_ephemeral_anonymous_session_request(false)) {
74 $fail('Ein POST-Request wird als fluechtiger Robot-Read behandelt.', 6);
75}
76
77$_SERVER['REQUEST_METHOD'] = 'GET';
78dbx()->uid = 7;
79if ($session->is_ephemeral_anonymous_session_request(false)) {
80 $fail('Eine authentifizierte Session wird als fluechtig behandelt.', 7);
81}
82
83dbx()->uid = 0;
84dbx()->browser->_robot = 1;
85$tmp = rtrim(sys_get_temp_dir(), '/\\') . DIRECTORY_SEPARATOR
86 . 'dbx-session-ephemeral-' . bin2hex(random_bytes(6));
87if (!mkdir($tmp, 0700, true) && !is_dir($tmp)) {
88 $fail('Temporaeres Session-Testverzeichnis konnte nicht erstellt werden.', 8);
89}
90
91session_save_path($tmp);
92session_id('dbxrobotsessiontest20260724');
93if (!session_start()) {
94 $fail('PHP-Testsession konnte nicht gestartet werden.', 9);
95}
96$_SESSION['probe'] = 'temporary';
97
98if (!$session->discard_ephemeral_anonymous_session(false)) {
99 $fail('Die fluechtige Robot-Session wurde nicht verworfen.', 10);
100}
101if (session_status() === PHP_SESSION_ACTIVE) {
102 $fail('Die fluechtige PHP-Session ist nach dem Verwerfen noch aktiv.', 11);
103}
104
105$files = glob($tmp . DIRECTORY_SEPARATOR . 'sess_*') ?: array();
106if ($files !== array()) {
107 foreach ($files as $file) {
108 @unlink($file);
109 }
110 @rmdir($tmp);
111 $fail('Die fluechtige PHP-Sessiondatei ist liegen geblieben.', 12);
112}
113@rmdir($tmp);
114
115echo "OK ephemeral guest PHP sessions\n";
dbxSessionEphemeralGuestTestBrowser $browser
Summary of dbxSession.
$_SERVER['REQUEST_METHOD']
exit
Definition index.php:146