Proyectos de Subversion LeadersLinked - Services

Rev

Rev 1 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
345 www 2
declare(strict_types = 1);
1 efrain 3
namespace LeadersLinked\Handler;
4
 
5
use Laminas\Db\Adapter\AdapterInterface;
6
use Laminas\Log\LoggerInterface;
7
use LeadersLinked\Mapper\SessionMapper;
8
use Laminas\Session\SaveHandler\SaveHandlerInterface;
9
use SessionHandlerInterface;
10
 
11
class SessionHandler implements SaveHandlerInterface
12
{
13
 
14
    /**
345 www 15
     *
1 efrain 16
     * @var SessionMapper
17
     */
18
    private $sessionMapper;
345 www 19
 
1 efrain 20
    /**
345 www 21
     *
1 efrain 22
     * @var string
23
     */
24
    private $session_name;
345 www 25
 
1 efrain 26
    /**
345 www 27
     *
1 efrain 28
     * @var int
29
     */
30
    private $session_lifetime;
345 www 31
 
1 efrain 32
    /**
345 www 33
     *
1 efrain 34
     * @param AdapterInterface $adapter
35
     * @param LoggerInterface $logger
36
     * @param int $session_lifetime
37
     */
38
    public function __construct(AdapterInterface $adapter, LoggerInterface $logger, int $session_lifetime)
39
    {
345 www 40
        $this->sessionMapper    = SessionMapper::getInstance($adapter, $logger);
1 efrain 41
        $this->session_lifetime = $session_lifetime;
42
    }
345 www 43
 
1 efrain 44
    /**
345 www 45
     *
46
     * {@inheritdoc}
1 efrain 47
     * @see SessionHandlerInterface::close()
48
     */
345 www 49
    public function close(): bool
1 efrain 50
    {
51
        return true;
52
    }
345 www 53
 
1 efrain 54
    /**
345 www 55
     *
56
     * {@inheritdoc}
1 efrain 57
     * @see SessionHandlerInterface::destroy()
58
     */
345 www 59
    public function destroy(string $id): bool
1 efrain 60
    {
61
        $this->sessionMapper->delete($id);
62
        return true;
63
    }
345 www 64
 
1 efrain 65
    /**
345 www 66
     *
67
     * {@inheritdoc}
1 efrain 68
     * @see SessionHandlerInterface::gc()
69
     */
345 www 70
    public function gc(int $max_lifetime): int
1 efrain 71
    {
345 www 72
        if ($this->sessionMapper->deleteAllExpired($max_lifetime)) {
1 efrain 73
            return $this->sessionMapper->getAffectedRows();
74
        } else {
75
            return 0;
76
        }
77
    }
345 www 78
 
1 efrain 79
    /**
345 www 80
     *
81
     * {@inheritdoc}
1 efrain 82
     * @see SessionHandlerInterface::open()
83
     */
345 www 84
    public function open(string $path, string $name): bool
1 efrain 85
    {
86
        $this->session_name = $name;
87
        return true;
88
    }
345 www 89
 
1 efrain 90
    /**
345 www 91
     *
92
     * {@inheritdoc}
1 efrain 93
     * @see SessionHandlerInterface::read()
94
     */
345 www 95
    public function read(string $id): string
1 efrain 96
    {
97
        $session = $this->sessionMapper->fetchOne($id);
345 www 98
        if ($session && $session->data) {
1 efrain 99
            return base64_decode($session->data);
345 www 100
        } else {
1 efrain 101
            return '';
102
        }
103
    }
345 www 104
 
1 efrain 105
    /**
345 www 106
     *
107
     * {@inheritdoc}
1 efrain 108
     * @see SessionHandlerInterface::write()
109
     */
345 www 110
    public function write(string $id, string $data): bool
1 efrain 111
    {
112
        $data = base64_encode($data);
345 www 113
 
1 efrain 114
        $session = $this->read($id);
345 www 115
        if ($session) {
1 efrain 116
            return $this->sessionMapper->update($id, $data);
117
        } else {
118
            return $this->sessionMapper->insert($id, $this->session_name, $data, $this->session_lifetime);
119
        }
120
    }
121
}