PHP Session的优化使用详解编程语言

前言

首先说一下,原版session实际并不是很烂,如果你的项目不是高并发项目,完全可以使用原版session。

PHP默认的session是以文件形式保存在本地磁盘上的,每次访问实际就是一次io操作,并发大时必定会影响服务器速度。

使用cookie代替session,这个我也不太建议,首先cookie是保存在客户端上的,很容易被篡改,如果使用加密确保cookie的完整性,那么cookie保存的数据就会变得越多,就越容易消耗带宽。

而使用内存代替文件储存session就成为现在的主流。

使用Redis替代文件存储Session

session_set_save_handler 该函数定义用户级session保存函数(如打开、关闭、写入等)。

编写一个session管理类sessionManager.php ,代码如下:

<?php 
class SessionManager{ 
 private $redis; 
 private $sessionSavePath; 
 private $sessionName; 
 private $sessionExpireTime=30;//redis,session的过期时间为30s 
 public function __construct(){ 
 $this->redis = new Redis();//创建phpredis实例 
 $this->redis->connect('127.0.0.1',6379);//连接redis 
 $this->redis->auth("107lab");//授权 
 $retval = session_set_save_handler( 
  array($this,"open"), 
  array($this,"close"), 
  array($this,"read"), 
  array($this,"write"), 
  array($this,"destroy"), 
  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);//获取redis中的指定记录 
 if($value){ 
  return $value; 
 }else{ 
  return ''; 
 } 
 } 
 public function write($id,$data){ 
 if($this->redis->set($id,$data)){//以session ID为键,存储 
  $this->redis->expire($id,$this->sessionExpireTime);//设置redis中数据的过期时间,即session的过期时间 
  return true; 
 } 
 return false; 
 } 
 public function destroy($id){ 
 if($this->redis->delete($id)){//删除redis中的指定记录 
  return true; 
 } 
 return false; 
 } 
 public function gc($maxlifetime){ 
 return true; 
 } 
 public function __destruct(){ 
 session_write_close(); 
 } 
} 

使用时,只需包含SessionManager类,然后实例化一个SessionManager对象。下面建立个session_set.php文件。

<?php 
 include('SessionManager.php'); 
 new SessionManager(); 
 $_SESSION['username'] = 'captain'; 

然后再创建一个session_get.php文件,输入如下代码:

<?php 
 include('SessionManager.php'); 
 new SessionManager(); 
 echo $_SESSION['username']; 
//print captain 

  

 

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/11749.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论