1、基於數據庫的存儲方式php
<?php /** * Created by PhpStorm. * User: tjj * Date: 16-12-30 * Time: 下午2:45 */ class SysSession { private $link; private $savePath; private $sessionName; public function open($savePath, $sessionName) { $this->savePath=$savePath; $this->sessionName=$sessionName; $link = mysqli_connect("your mysql server","user","pwd","database"); if($link){ $this->link = $link; return true; }else{ return false; } } public function close() { mysqli_close($this->link); return true; } public function read($id) { $result = mysqli_query($this->link,"SELECT Session_Data FROM Session WHERE Session_Id = '".$id."' AND Session_Expires > '".date('Y-m-d H:i:s')."'"); if($row = mysqli_fetch_assoc($result)){ return $row['Session_Data']; }else{ return ""; } } public function write($id, $data) { $DateTime = date('Y-m-d H:i:s'); $NewDateTime = date('Y-m-d H:i:s',strtotime($DateTime.' + 1 hour')); $result = mysqli_query($this->link,"REPLACE INTO Session SET Session_Id = '".$id."', Session_Expires = '".$NewDateTime."', Session_Data = '".$data."'"); if($result){ return true; }else{ return false; } } public function destroy($id) { $result = mysqli_query($this->link,"DELETE FROM Session WHERE Session_Id ='".$id."'"); if($result){ return true; }else{ return false; } } public function gc($maxlifetime) { $result = mysqli_query($this->link,"DELETE FROM Session WHERE ((UNIX_TIMESTAMP(Session_Expires) + ".$maxlifetime.") < ".$maxlifetime.")"); if($result){ return true; }else{ return false; } } } /*$handler = new SysSession(); session_set_save_handler($handler, true);*/ //使用 COOKIE 保存 SESSION ID 的方式 ini_set('session.use_cookies', 1); ini_set('session.cookie_path', "/"); //多主機共享保存 SESSION ID 的 COOKIE ini_set('session.cookie_domain', ""); $handler = new SysSession(); session_set_save_handler( array($handler, 'open'), array($handler, 'close'), array($handler, 'read'), array($handler, 'write'), array($handler, 'destroy'), array($handler, 'gc') ); // 下面這行代碼能夠防止使用對象做爲會話保存管理器時可能引起的非預期行爲 register_shutdown_function('session_write_close'); session_start(); $_SESSION['var1'] = "site 1"; $_SESSION['var2'] = "page 2"; var_dump($_SESSION['var2']); // 如今可使用 $_SESSION 保存以及獲取數據了 ?>
2、基於緩存(redis)的存儲方式mysql
<?php /** * Created by PhpStorm. * User: tjj * Date: 16-12-30 * Time: 下午2:45 */ class RedisSession { private $redis; private $savePath; private $sessionName; private $TIME; public function open($savePath, $sessionName) { $this->savePath=$savePath; $this->sessionName=$sessionName; $this->TIME=60*60; $redis = new \Redis(); $con = $redis->connect('your redis server', 'port'); if($con){ $this->redis = $redis; return true; }else{ return false; } } public function close() { $this->redis->close(); return true; } public function read($id) { $result=$this->redis->get($id); if($result){ return $result; }else{ return ""; } } public function write($id, $data) { $ret=$this->redis->set($id, $data,$this->TIME); if (TRUE != $ret) { echo "Fatal Error: SessionID $id Save data failed!"; return FALSE; } return true; } public function destroy($id) { self::write($id,''); return false; } public function gc() { return true; } } /*$handler = new SysSession(); session_set_save_handler($handler, true);*/ //使用 COOKIE 保存 SESSION ID 的方式 ini_set('session.use_cookies', 1); ini_set('session.cookie_path', "/"); //多主機共享保存 SESSION ID 的 COOKIE ini_set('session.cookie_domain', ""); $handler = new RedisSession(); session_set_save_handler( array($handler, 'open'), array($handler, 'close'), array($handler, 'read'), array($handler, 'write'), array($handler, 'destroy'), array($handler, 'gc') ); // 下面這行代碼能夠防止使用對象做爲會話保存管理器時可能引起的非預期行爲 register_shutdown_function('session_write_close'); session_start(); $_SESSION['var1'] = "site 1"; $_SESSION['var2'] = "page 2"; var_dump($_SESSION['var2']); // 如今可使用 $_SESSION 保存以及獲取數據了 ?>