时间:2021-05-26
对于大访问量的站点使用默认的Session 并不合适,我们可以将其存入数据库、或者使用Redis KEY-VALUE数据存储方案
首先新建一个session表
Mysql 的memory引擎采用内存表,所有数据存储在内存,操作速度快
<?php//引入数据库文件include "db.php";class MySessionHandler implements SessionHandlerInterface{ private $savePath; private $sessData; public $expiretime; //设置过期时间 public $db; //数据库 public function __construct($hanlder =''){ $this->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','/'); 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'];数据库代码 db.php
<?php class Database{ static $instance; static $db; static function getInstance(){ if(self::$instance){ return self::$instance; }else{ return new Database(); } } public function __construct(){ self::$db = new PDO('mysql:host=localhost;dbname=session', 'root',''); } public function getOne($sql){ $rs =self::$db->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
<?phpclass SessionManager{ private $redis; private $sessionSavePath; private $sessionName; private $sessionExpireTime = 30; public function __construct(){ $this->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'];以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
实现步骤1:Java后台生成一张随机数字/字母/汉字验证码的图片。2:存入redis或者session。3:用户输入验证码跟redis取出数据做比对。图片生成工
使用memcache来同步session是还是不错的,当然也可以通过redis来保存session,可以php开启并将Session存储到Redis缓存,下面是
本文实例讲述了PHP使用Redis替代文件存储Session的方法。分享给大家供大家参考,具体如下:PHP默认使用文件存储session,如果并发量大,效率非常
本文介绍的是PHP分布式中Redis实现Session的方法,下面话不多说,直接先来看两个方法是什么方法一:找到配置文件php.ini,修改为下面内容,保存并重
方法文件session实现文件:memcachedsession.php实现原理(也是PHP内部session的实现原理):1.先判断客户端有没有session