Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
33.33% covered (danger)
33.33%
5 / 15
83.33% covered (warning)
83.33%
5 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
StandardSession
33.33% covered (danger)
33.33%
5 / 15
83.33% covered (warning)
83.33%
5 / 6
72.07
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 resetConfigure
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
30
 has
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 get
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 set
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 delete
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 clear
n/a
0 / 0
n/a
0 / 0
2
 session_start_if_cookie_set
n/a
0 / 0
n/a
0 / 0
2
1<?php
2
3namespace Olz\Utils;
4
5class StandardSession extends AbstractSession {
6    use WithUtilsTrait;
7
8    public function __construct() {
9        self::session_start_if_cookie_set();
10    }
11
12    /** @param array{timeout?: int} $config */
13    public function resetConfigure(array $config): void {
14        global $_SESSION;
15        $session_already_exists = session_id() != '' && isset($_SESSION);
16        if ($session_already_exists) {
17            $this->clear();
18        }
19
20        $timeout = $config['timeout'] ?? 3600;
21        ini_set('session.gc_maxlifetime', $timeout);
22        session_set_cookie_params($timeout);
23
24        $session_can_be_created = !headers_sent();
25        $was_successful = false;
26        if ($session_can_be_created) {
27            // @codeCoverageIgnoreStart
28            // Reason: Cannot start session in tests.
29            // $was_successful = session_start();
30            $was_successful = session_start() && session_regenerate_id(true);
31            // @codeCoverageIgnoreEnd
32        }
33    }
34
35    public function has(string $key): bool {
36        return isset($_SESSION[$key]);
37    }
38
39    public function get(string $key): ?string {
40        return $_SESSION[$key] ?? null;
41    }
42
43    public function set(string $key, ?string $new_value): void {
44        $_SESSION[$key] = $new_value;
45    }
46
47    public function delete(string $key): void {
48        unset($_SESSION[$key]);
49    }
50
51    // @codeCoverageIgnoreStart
52    // Reason: Cannot start/destroy session in tests.
53
54    public function clear(): void {
55        @session_unset();
56        @session_destroy();
57        $name = session_name() ?: '';
58        @setcookie($name, '', time() - 3600, '/');
59    }
60
61    public static function session_start_if_cookie_set(): void {
62        if (isset($_COOKIE[session_name()])) {
63            @session_start();
64        }
65    }
66
67    // @codeCoverageIgnoreEnd
68}