您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
三六零分类信息网 > 庆阳分类信息网,免费分类信息发布

php实现Session存储到Redis

2025/5/23 14:35:11发布14次查看
这篇文章主要介绍了php实现session存储到redis的方法,php session可以保存到文本或者内存、还有数据库,本文讲的是存到redis的方法,
对于大访问量的站点使用默认的session 并不合适,我们可以将其存入数据库、或者使用redis key-value数据存储方案
首先新建一个session表
create table `sessions` ( `sid` char(40) not null, `updatetime` int(20) not null, `data` varchar(200) not null, unique key `sid` (`sid`) using hash) engine=memory default charset=utf8;
mysql 的memory引擎采用内存表,所有数据存储在内存,操作速度快
db = database::getinstance();//获取数据库实力///var_dump($this->db);}public function open($savepath, $sessionname) {return true; }public function close() {return true; }public function read($id) {$sql =select * from sessions where sid ='$id';$result = $this->db->execute($sql);if(!empty($result)){return $this->sessdata = $result;} }//函数的参数 $id -> 当前会话id//数据data -> 序列化之后的字符串 public function write($id, $data) {// echo $id;// echo $data;$now = time();$newexp = $now+$this->expiretime; //总时间=当前时间 + 期限时间$sql = select * from sessions where sid ='$id';$result = $this->db->getone($sql);//var_dump($result);if($data==''||isset($data)){$data = $this->sessdata;}if($result){//如果存在则更新 $sql =update sessions set updatetime = '$newexp',data ='$data' where sid = '$id';//echo $sql;$update_data =$this->db->execute($sql);if($update_data){return true;}}else{//不存在则生成生成 $sql = insert into sessions(sid,updatetime,data) values('$id','$now','$data');$insert_data = $this->db->execute($sql);if($insert_data){return true;}}return false; }public function destroy($id) { //销毁$sql = delete from sessions where sid=.$id;$destory = $this->db->execute($sql);if($destory){return true;}else{return false;} }public function gc($sessmaxlifetime) {$t = time(); $sql =delete from sessions where $t - 'updatetime'>${sessmaxlifetime};$data = $this->db->execute($this->tosql);if($data){return true;}else{return false;}return true; }}
实例化
此处 php 手册可以有两种方法
1,实现了sessionhandlerinterface借口的对象,自php5.4可以使用
2 ,直接使用  session_set_save_handler
//判断php版本 if(version_compare(php_version,5.4)==1){session_set_save_handler($handler, true); session_start(); }else{ini_set('session.use_trans_sid',0);ini_set('session.use_cookies',1);ini_set('session.cookie_path','http://www.jb51.net/');ini_set('session.save_handler','user');session_module_name('user');session_set_save_handler(array($session,open),array($session,close),array($session,read),array($session,write),array($session,destory),array($session,gc));session_start();}$_session['qq']=qq;echo $_session['qq'];
数据库代码
query($sql);@$rs->setfetchmode(pdo::fetch_assoc);//返回关联数组$result = $rs -> fetch();return $result;}public function execute($sql){$rs = self::$db->exec($sql);return $rs;}} //$data = database::getinstance();//var_dump($data);
  使用redis 存储session
redis = new redis();$this->redis->connect('127.0.0.1',6379); //连接redis$retval = session_set_save_handler(array($this,open),array($this,close),array($this,read),array($this,write),array($this,destory),array($this,gc));session_start(); }public function open($path,$name){return true;}public function close(){return true;}public function read($id){$value = $this->redis->get($id);if($value){return $value;}else{return ;}}public function write($id,$data){if($this->redis->set($id,$data)){$this->redis->expire($id,$this->sessionexpiretime);//设置过期时间return true;}return false;}public function destory($id){if($this->redis->delete($id)){return true;}return false;}public function gc($maxlifetime){return true;}//析构函数public function __destruct(){session_write_close();}} $re = new sessionmanager();$_session['name'] = qq;echo $_session['name'];
以上就是详细的介绍了php实现session存储到redis的方法,希望对大家的学习有所帮助。
庆阳分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product