麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 開(kāi)發(fā) > PHP > 正文

php實(shí)現(xiàn)Session存儲(chǔ)到Redis

2024-05-04 23:40:17
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

這篇文章主要介紹了php實(shí)現(xiàn)Session存儲(chǔ)到Redis的方法,php Session可以保存到文本或者內(nèi)存、還有數(shù)據(jù)庫(kù),本文講的是存到Redis的方法,

對(duì)于大訪問(wèn)量的站點(diǎn)使用默認(rèn)的Session 并不合適,我們可以將其存入數(shù)據(jù)庫(kù)、或者使用Redis KEY-VALUE數(shù)據(jù)存儲(chǔ)方案

首先新建一個(gè)session表

 

 
  1. CREATE TABLE `sessions` ( 
  2. `sid` char(40) NOT NULL, 
  3. `updatetime` int(20) NOT NULL, 
  4. `data` varchar(200) NOT NULL, 
  5. UNIQUE KEY `sid` (`sid`) USING HASH 
  6. ) ENGINE=MEMORY DEFAULT CHARSET=utf8; 

Mysql 的memory引擎采用內(nèi)存表,所有數(shù)據(jù)存儲(chǔ)在內(nèi)存,操作速度快

 

  1. <?php 
  2. //引入數(shù)據(jù)庫(kù)文件 
  3. include "db.php"
  4. class MySessionHandler implements SessionHandlerInterface 
  5. private $savePath; 
  6. private $sessData; 
  7. public $expiretime; //設(shè)置過(guò)期時(shí)間 
  8. public $db; //數(shù)據(jù)庫(kù) 
  9. public function __construct($hanlder =''){ 
  10.  
  11. $this->db = Database::getInstance();  
  12.  
  13. //獲取數(shù)據(jù)庫(kù)實(shí)力  
  14. ///var_dump($this->db); 
  15.  
  16.  
  17. public function open($savePath, $sessionName) 
  18.  
  19. return true
  20.  
  21. public function close() 
  22. return true
  23.  
  24. public function read($id) 
  25. {  
  26. $sql ="select * from sessions where sid ='$id'"
  27. $result = $this->db->execute($sql); 
  28. if(!empty($result)){ 
  29. return $this->sessData = $result; 
  30. //函數(shù)的參數(shù) $id -> 當(dāng)前會(huì)話ID 
  31. //數(shù)據(jù)DATA -> 序列化之后的字符串 
  32. public function write($id, $data) 
  33. // echo $id; 
  34. // echo $data; 
  35. $now = time(); 
  36. $newExp = $now+$this->expiretime; //總時(shí)間=當(dāng)前時(shí)間 + 期限時(shí)間 
  37. $sql = "select * from sessions where sid ='$id'"
  38. $result = $this->db->getOne($sql); 
  39. //var_dump($result); 
  40. if($data==''||isset($data)){ 
  41. $data = $this->sessData; 
  42. if($result){ 
  43. //如果存在則更新 
  44. $sql ="update sessions set updatetime = '$newExp',data ='$data' where sid = '$id'"
  45. //echo $sql; 
  46. $update_data =$this->db->execute($sql); 
  47. if($update_data){ 
  48. return true
  49.  
  50. }else
  51. //不存在則生成生成 
  52. $sql = "insert into sessions(sid,updatetime,data) values('$id','$now','$data')"
  53. $insert_data = $this->db->execute($sql); 
  54. if($insert_data){ 
  55. return true
  56. return false
  57.  
  58. public function destroy($id) 
  59. //銷(xiāo)毀 
  60. $sql = "delete from sessions where sid="."$id"
  61. $destory = $this->db->execute($sql); 
  62. if($destory){ 
  63. return true
  64. }else
  65. return false
  66.  
  67. public function gc($sessMaxLifeTime) 
  68. $t = time(); 
  69. $sql ="delete from sessions where $t - 'updatetime'>${sessMaxLifeTime}"
  70. $data = $this->db->execute($this->tosql); 
  71. if($data){ 
  72. return true
  73. }else
  74. return false
  75. return true

實(shí)例化

此處 PHP 手冊(cè)可以有兩種方法

1,實(shí)現(xiàn)了SessionHandlerInterface借口的對(duì)象,自PHP5.4可以使用

2 ,直接使用 session_set_save_handler

 

 
  1. //判斷PHP版本 
  2. if(version_compare(PHP_VERSION,5.4)==1){ 
  3.  
  4. session_set_save_handler($handler, true); 
  5. session_start(); 
  6. }else{  
  7. ini_set('session.use_trans_sid',0); 
  8. ini_set('session.use_cookies',1); 
  9. ini_set('session.cookie_path','/'); 
  10. ini_set('session.save_handler','user'); 
  11. session_module_name('user'); 
  12. session_set_save_handler(array($session,"open"),array($session,"close"),array($session,"read"),array($session,"write"),array($session,"destory"),array($session,"gc")); 
  13. session_start();  
  14. $_SESSION['QQ']="QQ"
  15. echo $_SESSION['QQ']; 

數(shù)據(jù)庫(kù)代碼

 

 
  1. <?php  
  2. class Database{ 
  3. static $instance; 
  4. static $db; 
  5. static function getInstance(){  
  6. if(self::$instance){ 
  7. return self::$instance; 
  8. }else
  9. return new Database();  
  10. public function __construct(){ 
  11. self::$db = new PDO('mysql:host=localhost;dbname=session''root',''); 
  12.  
  13. public function getOne($sql){ 
  14. $rs =self::$db->query($sql); 
  15. @$rs->setFetchMode(PDO::FETCH_ASSOC);//返回關(guān)聯(lián)數(shù)組 
  16. $result = $rs -> fetch(); 
  17. return $result; 
  18. public function execute($sql){ 
  19.  
  20.  
  21. $rs = self::$db->exec($sql); 
  22. return $rs; 
  23.  
  24. }  
  25.  
  26.  
  27. }  
  28. //$data = Database::getInstance(); 
  29. //var_dump($data); 

使用REDIS 存儲(chǔ)SESSION

 

 
  1. <?php 
  2. class SessionManager{ 
  3. private $redis; 
  4. private $sessionSavePath; 
  5. private $sessionName; 
  6. private $sessionExpireTime = 30; 
  7. public function __construct(){ 
  8. $this->redis = new Redis(); 
  9. $this->redis->connect('127.0.0.1',6379); //連接redis 
  10. $retval = session_set_save_handler( 
  11. array($this,"open"), 
  12. array($this,"close"), 
  13. array($this,"read"), 
  14. array($this,"write"), 
  15. array($this,"destory"), 
  16. array($this,"gc"
  17. ); 
  18. session_start(); 
  19.  
  20. public function open($path,$name){ 
  21. return true
  22. public function close(){ 
  23. return true
  24. public function read($id){ 
  25. $value = $this->redis->get($id); 
  26. if($value){ 
  27. return $value; 
  28. }else
  29. return ""
  30. public function write($id,$data){ 
  31. if($this->redis->set($id,$data)){ 
  32. $this->redis->expire($id,$this->sessionExpireTime);  
  33. //設(shè)置過(guò)期時(shí)間 
  34. return true
  35. return false
  36. public function destory($id){ 
  37. if($this->redis->delete($id)){ 
  38. return true
  39. return false
  40. public function gc($maxlifetime){ 
  41. return true
  42. //析構(gòu)函數(shù) 
  43. public function __destruct(){ 
  44. session_write_close(); 
  45.  
  46. }  
  47. $re = new SessionManager(); 
  48. $_SESSION['name'] = "qq"
  49. echo $_SESSION['name']; 

以上就是詳細(xì)的介紹了php實(shí)現(xiàn)Session存儲(chǔ)到Redis的方法,希望對(duì)大家的學(xué)習(xí)有所幫助。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到PHP教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产精品亚洲欧美一级在线 | 免费在线观看国产 | 久久密| 精品国产三级a | 宅男噜噜噜66一区二区 | 韩国一级免费视频 | 国产免费观看视频 | 精品国产一区二区三区四区阿崩 | 精品国产一区二区三区四 | 日本成人一区二区三区 | 日本中文字幕网址 | 日本不卡一区二区三区在线观看 | 一级电影免费在线观看 | 日韩黄色片免费看 | 午夜影视一区二区 | 精品成人在线观看 | 欧美 日韩 亚洲 中文 | 最新黄色毛片 | 欧美视频一区二区 | 极品美女一级毛片 | 毛片一级免费看 | 久久91久久久久麻豆精品 | 久久精品视频黄色 | 欧美精品成人一区二区在线观看 | 91九色论坛 | 日韩av在线资源 | 精品国产一区二区三区四区阿崩 | 精品久久久久久综合日本 | 深夜免费视频 | 久久国产精品区 | 欧美一级电影网站 | 久久免费视频5 | av手机在线免费播放 | 久久蜜臀一区二区三区av | 久久综合给合久久狠狠狠97色69 | 亚洲精品久久久久久下一站 | xnxx 日本免费 | 久久精品伊人网 | 草莓福利视频在线观看 | 91成人免费看 | 成人在线免费视频观看 |