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
 
8 - 52
    public static function getDBSessionId(){
53
        return self::$_sess_db;
54
    }
55
 
7 - 56
    public static function getSessionTab(){
57
        return self::$sessionTab;
58
    }
59
 
60
    public static function setSessionTab($tab = 0){
61
        self::$sessionTab = $tab ? (int)$tab : (int)rand(1, pow(10, 12) - 1);
62
    }
63
 
64
    public function open($savePath, $sessionName)
65
    {
66
        if(is_null(self::$sessionTab)){
67
            self::setSessionTab();
68
        }
69
 
70
        self::$_sess_db = mysqli_connect(self::$db_host, self::$db_user, self::$db_pass, self::$db_name);
71
 
72
        if (mysqli_connect_errno())
73
        {
74
            return false;
75
        }
76
 
77
        return true;
78
    }
79
 
80
    public function close()
81
    {
82
        return mysqli_close(self::$_sess_db);
83
    }
84
 
85
    public function read($id)
86
    {
87
        $id = mysqli_real_escape_string(self::$_sess_db, $id);
88
 
89
        $sql = "SELECT data
90
                FROM   sessions
91
                WHERE  id = '$id' and tab = '" . $this->getSessionTab() . "'";
92
 
93
        if ($result = mysqli_query(self::$_sess_db, $sql))
94
        {
95
            if (mysqli_num_rows($result))
96
        {
97
                $record = mysqli_fetch_assoc($result);
98
 
99
                $decrypted = Cryptor::Decrypt($record['data']);
100
                return $decrypted;
101
            }
102
        }
103
 
104
        return '';
105
    }
106
 
107
    public function write($id, $data)
108
    {
109
        $id = mysqli_real_escape_string(self::$_sess_db, $id);
110
        $access = mysqli_real_escape_string(self::$_sess_db, time());
111
        $encrypted = Cryptor::Encrypt($data);
112
 
113
        $sql = "REPLACE
114
                INTO    sessions
115
                VALUES  ('$id', '" . $this->getSessionTab() . "', '$access', '$encrypted')";
116
 
117
        return mysqli_query(self::$_sess_db, $sql);
118
    }
119
 
120
    public function destroy($id)
121
    {
122
        $id = mysqli_real_escape_string(self::$_sess_db, $id);
123
 
124
        $sql = "DELETE
125
                FROM   sessions
126
                WHERE  id = '$id' and tab = '" . $this->getSessionTab() . "'";
127
 
128
        return mysqli_query(self::$_sess_db, $sql);
129
    }
130
 
131
    public function gc($maxlifetime)
132
    {
133
        $old = mysqli_real_escape_string(self::$_sess_db, time() - $maxlifetime);
134
 
135
    $sql = "DELETE
136
            FROM   sessions
137
            WHERE  access < '$old'";
138
 
139
    return mysqli_query(self::$_sess_db, $sql);
140
    }
141
}
142