zoukankan      html  css  js  c++  java
  • 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
    

      

  • 相关阅读:
    JS函数强化
    Javascript创建对象的方式
    call和apply的区别
    事件绑定和普通事件有什么区别
    又走一个
    风的季节
    关于Dictionary的线程安全问题
    进程管理简述
    开通
    WPF 音乐播放器界面
  • 原文地址:https://www.cnblogs.com/peiyu1988/p/6767470.html
Copyright © 2011-2022 走看看