Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
24 / 24
100.00% covered (success)
100.00%
18 / 18
CRAP
100.00% covered (success)
100.00%
1 / 1
NativeSession
100.00% covered (success)
100.00%
24 / 24
100.00% covered (success)
100.00%
18 / 18
20
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 start
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 isStarted
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
 all
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 has
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
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 replace
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 count
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 addFlashMessage
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getFlash
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 regenerateId
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 destroy
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 getId
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getName
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 save
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3// ╔════════════════════════════════════════════════════════════╗
4// ║ MIT Licence (#Expat) - https://opensource.org/licenses/MIT ║
5// ║ Copyright 2026 Frederic Poeydomenge <dyno@phexium.com>     ║
6// ╚════════════════════════════════════════════════════════════╝
7
8declare(strict_types=1);
9
10namespace Phexium\Plugin\Session\Adapter;
11
12use Override;
13use Phexium\Plugin\Session\Port\FlashInterface;
14use Phexium\Plugin\Session\Port\SessionInterface;
15
16final readonly class NativeSession implements SessionInterface
17{
18    public function __construct(private string $sessionName = 'PHPSESSID') {}
19
20    #[Override]
21    public function start(): void
22    {
23        if ($this->isStarted()) {
24            return;
25        }
26
27        session_name($this->sessionName);
28        session_start();
29    }
30
31    #[Override]
32    public function isStarted(): bool
33    {
34        return session_status() === PHP_SESSION_ACTIVE;
35    }
36
37    #[Override]
38    public function get(string $key, mixed $default = null): mixed
39    {
40        return $_SESSION[$key] ?? $default;
41    }
42
43    #[Override]
44    public function set(string $key, mixed $value): void
45    {
46        $_SESSION[$key] = $value;
47    }
48
49    #[Override]
50    public function all(): array
51    {
52        return $_SESSION;
53    }
54
55    #[Override]
56    public function has(string $key): bool
57    {
58        return isset($_SESSION[$key]);
59    }
60
61    #[Override]
62    public function delete(string $key): void
63    {
64        unset($_SESSION[$key]);
65    }
66
67    #[Override]
68    public function clear(): void
69    {
70        $_SESSION = [];
71    }
72
73    #[Override]
74    public function replace(array $data): void
75    {
76        $_SESSION = $data;
77    }
78
79    #[Override]
80    public function count(): int
81    {
82        return count($_SESSION);
83    }
84
85    #[Override]
86    public function addFlashMessage(string $level, string $message): void
87    {
88        $this->getFlash()->add($level, $message);
89    }
90
91    #[Override]
92    public function getFlash(): FlashInterface
93    {
94        return new NativeFlash($_SESSION);
95    }
96
97    #[Override]
98    public function regenerateId(): void
99    {
100        session_regenerate_id();
101    }
102
103    #[Override]
104    public function destroy(): void
105    {
106        $_SESSION = [];
107
108        if (ini_get('session.use_cookies') === '1') {
109            setcookie(session_name(), '', ['expires' => 1] + session_get_cookie_params());
110        }
111
112        session_destroy();
113    }
114
115    #[Override]
116    public function getId(): string
117    {
118        return session_id();
119    }
120
121    #[Override]
122    public function getName(): string
123    {
124        return session_name();
125    }
126
127    #[Override]
128    public function save(): void
129    {
130        session_write_close();
131    }
132}