use this class to save session to redis by class
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 | <?php /** * Redis & PHP Session Handler */ define("SESSION_REDIS_HOST","127.0.0.1") // Redis server address if(! interface_exists('SessionHandlerInterface')) { interface SessionHandlerInterface { public function close(); public function destroy($session_id); public function gc($maxlifetime); public function open($save_path, $name); public function read($session_id); public function write($session_id, $session_data); } } class Redis_SessionHandler implements SessionHandlerInterface{ /** * @var seleced Redis db */ public $redis_db = 1; /** * @var int */ public $lifeTime; /** * @var Redis */ public $redis=null; /** * @var string */ public $initSessionData; /** * interval for session expiration update in the DB * @var int */ protected $_refreshTime = 1800; //30 minutes private $sessionPrefix=""; /** * constructor of the handler - initialises Redis object * * @return bool */ public function __construct() { $this->sessionPrefix="session."; // this ensures to write down and close the session when destroying the // handler object ini_set('session.save_handler', 'user'); register_shutdown_function("session_write_close"); $this->lifeTime = intval(ini_get("session.gc_maxlifetime")); $this->initSessionData = null; session_set_save_handler( array($this, "open"), array($this, "close"), array($this, "read"), array($this, "write"), array($this, "destroy"), array($this, "gc")); return true; } // __construct() /** * Init Redis connection. */ protected function initRedis() { $this->redis = new Redis(); $this->redis->connect(SESSION_REDIS_HOST, 6379); $this->redis->select($this->redis_db); return true; } // initRedis() /** * opening of the session - mandatory arguments won't be needed * we'll get the session id and load session data, it the session exists * * @param string $savePath * @param string $sessionName * @return bool */ public function open($savePath, $sessionName) { $this->initRedis(); $session_id = session_id(); if ($session_id !== "") { $this->initSessionData = $this->read($session_id); } return true; } // open() /** * closing the session * * @return bool */ public function close() { $this->lifeTime = null; $this->initSessionData = null; unset($this->redis); return true; } // close() /** * reading of the session data * * @param string $session_id * @return string */ public function read($session_id) { $now = time(); $data = $this->redis->get($this->sessionPrefix.$session_id); $this->redis->expire($this->sessionPrefix.$session_id, $this->lifeTime); return $data ? $data : ''; } // read() /** * cache write - this is called when the script is about to finish, * or when session_write_close() is called * data are written only when something has changed * * @param string $session_id * @param string $data * @return bool */ public function write($session_id, $data){ // we store time of the db record expiration in the Redis $result = $this->redis->set($this->sessionPrefix.$session_id, $data, $this->lifeTime); return $result; } // write() /** * destroy of the session * * @param string $session_id * @return bool */ public function destroy($session_id){ $this->redis->delete($this->sessionPrefix.$session_id); return true; } // destroy() /** * called by the garbage collector * * @param int $maxlifetime * @return bool */ public function gc($maxlifetime){ return true; } // gc() } // Initialize custom session management. new Redis_SessionHandler(); |
Useage :
1 2 3 | <?php // Initialize custom session management. new Redis_SessionHandler(); |
Enjoy!