Subversion Repositories cheapmusic

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
7 - 1
<?php
2
class MySessionHandler implements SessionHandlerInterface {
3
    private static $instance = null;
4
    private static $sessionTab = 0;
5
    private static $_sess_db = null;
6
    private static $db_user = null;
7
    private static $db_pass = null;
8
    private static $db_name = null;
9
    private static $db_host = null;
10
 
11
    public static function getInstance($set_tab = null, $mysqlConfig = null){
12
        if (is_null(self::$instance)){
13
            self::$instance = new self();
14
        }
15
 
16
        if ($set_tab && !is_null($set_tab) && $set_tab > 0) {
17
            self::setSessionTab($set_tab);
18
        } else {
19
            self::setSessionTab();
20
        }
21
 
22
        // store mysqli configuration
23
        if (!is_null($mysqlConfig)) {
24
            if (isset($mysqlConfig['db_user']) && !empty($mysqlConfig['db_user'])) {
25
                self::$db_user = $mysqlConfig['db_user'];
26
            } else {
27
                throw new \Exception("MySessionHandler:: - db_user not set in configuration");
28
            }
29
 
30
            if (isset($mysqlConfig['db_pass']) && !empty($mysqlConfig['db_pass'])) {
31
                self::$db_pass = $mysqlConfig['db_pass'];
32
            } else {
33
                throw new \Exception("MySessionHandler:: - db_pass not set in configuration");
34
            }
35
 
36
            if (isset($mysqlConfig['db_name']) && !empty($mysqlConfig['db_name'])) {
37
                self::$db_name = $mysqlConfig['db_name'];
38
            } else {
39
                throw new \Exception("MySessionHandler:: - db_name not set in configuration");
40
            }
41
 
42
            if (isset($mysqlConfig['db_host']) && !empty($mysqlConfig['db_host'])) {
43
                self::$db_host = $mysqlConfig['db_host'];
44
            } else {
45
                throw new \Exception("MySessionHandler:: - db_host not set in configuration");
46
            }
47
        }
48
 
49
        return self::$instance;
50
    }
51
 
52
    public static function getSessionTab(){
53
        return self::$sessionTab;
54
    }
55
 
56
    public static function setSessionTab($tab = 0){
57
        self::$sessionTab = $tab ? (int)$tab : (int)rand(1, pow(10, 12) - 1);
58
    }
59
 
60
    public function open($savePath, $sessionName)
61
    {
62
        if(is_null(self::$sessionTab)){
63
            self::setSessionTab();
64
        }
65
 
66
        self::$_sess_db = mysqli_connect(self::$db_host, self::$db_user, self::$db_pass, self::$db_name);
67
 
68
        if (mysqli_connect_errno())
69
        {
70
            return false;
71
        }
72
 
73
        return true;
74
    }
75
 
76
    public function close()
77
    {
78
        return mysqli_close(self::$_sess_db);
79
    }
80
 
81
    public function read($id)
82
    {
83
        $id = mysqli_real_escape_string(self::$_sess_db, $id);
84
 
85
        $sql = "SELECT data
86
                FROM   sessions
87
                WHERE  id = '$id' and tab = '" . $this->getSessionTab() . "'";
88
 
89
        if ($result = mysqli_query(self::$_sess_db, $sql))
90
        {
91
            if (mysqli_num_rows($result))
92
        {
93
                $record = mysqli_fetch_assoc($result);
94
 
95
                $decrypted = Cryptor::Decrypt($record['data']);
96
                return $decrypted;
97
            }
98
        }
99
 
100
        return '';
101
    }
102
 
103
    public function write($id, $data)
104
    {
105
        $id = mysqli_real_escape_string(self::$_sess_db, $id);
106
        $access = mysqli_real_escape_string(self::$_sess_db, time());
107
        $encrypted = Cryptor::Encrypt($data);
108
 
109
        $sql = "REPLACE
110
                INTO    sessions
111
                VALUES  ('$id', '" . $this->getSessionTab() . "', '$access', '$encrypted')";
112
 
113
        return mysqli_query(self::$_sess_db, $sql);
114
    }
115
 
116
    public function destroy($id)
117
    {
118
        $id = mysqli_real_escape_string(self::$_sess_db, $id);
119
 
120
        $sql = "DELETE
121
                FROM   sessions
122
                WHERE  id = '$id' and tab = '" . $this->getSessionTab() . "'";
123
 
124
        return mysqli_query(self::$_sess_db, $sql);
125
    }
126
 
127
    public function gc($maxlifetime)
128
    {
129
        $old = mysqli_real_escape_string(self::$_sess_db, time() - $maxlifetime);
130
 
131
    $sql = "DELETE
132
            FROM   sessions
133
            WHERE  access < '$old'";
134
 
135
    return mysqli_query(self::$_sess_db, $sql);
136
    }
137
}
138