php多台服务器怎样实现session共享1:写入数据库

    xiaoxiao2021-03-25  97

    这个系列会写三篇,1:存入数据库,2:存入多级目录,3:存入内存(redis或者memchced)

    今天讲存入数据库:

         session机制在这里我就不讲了,网上有很多

        1:session存入数据库需要吧save_handler改成user,两种方式修改

          (1):配置文件修改,在php.ini里找到session.save_handler,默认是files,改成user,session.save_handler=user

          (2):在代码里配置,session_module_name('user');

       2:在session_start()之前设置session_set_save_handler,这个函数php官网上说的很清楚,里边有几个回调函数,ji就需要在类里设置几个函数,这里主要说下gc函数,就是清楚过期的session,这个gc函数是有这两个参数的比值决定的:gc_probability/gc_divisor,gc_probability默认是1,gc_divisor默认是1000,表示1000个请求才会清理过期的 session,如果想快点清楚过期session,可以吧gc_divisor调小点,不过对应的性能消耗也会增加,所以看自己了

    下边直接贴代码:

         <?php define('MY_SESS_TIME',10); //SESSION 超时时间 class sessdb {     static public $db;//数据库连接对象       function __construct($dbname)   {      self::$db = $dbname;   }       function init()   {      $domain = 'localhost'; //cookie 域名设置             ini_set('session.use_trans_sid',0);//如果浏览器被禁止了使用cookie,这里设置为1后将会在url地址栏后面自动加上sessionid传递      ini_set('session.gc_maxlifetime',MY_SESS_TIME);//这个是Session数据在服务器端储存的时间      ini_set('session.use_cookies',1); //sessionid的传递方式,默认是cookie,推荐使用      ini_set('session.cookie_path','/'); //sessionid的cookie路径,不需要修改      ini_set('session.cookie_domain',$domain);// ;sessionid的cookie域名      session_module_name('user');      session_set_save_handler(          array('sessdb','open'),          array('sessdb','close'),               array('sessdb','read'),               array('sessdb','write'),               array('sessdb','destroy'),                   array('sessdb','gc')               );      session_start();   }   function open($save_path,$session_name)   {      return true;   }       function close()   {          return true;   }         function read($sesskey) //读取到对应于 SESSION ID 的 SESSION 数据    {      $sql = "SELECT `data` FROM `sess` WHERE `sesskey`='$sesskey' AND `expiry`>=" . time();      $res = self::$db->mysqlfetch($sql);      if(!empty($res)){         return $res[0]['data'];      }else{         return '';      }    }    function write($sesskey,$data)    {              $expiry = time()+MY_SESS_TIME;     if(!empty($data)){         $sql = "insert INTO `sess` (`sesskey`,`expiry`,`data`) VALUES ('$sesskey',$expiry,'$data')";         self::$db->mysqlquery($sql);             return true;     }else{         return false;     }    }       function destroy($sesskey)     {         $sql = "DELETE FROM `sess` WHERE `sesskey`='$sesskey'";         self::$db->mysqlquery($sql);                 return true;     }        function gc($maxlifetime = null)     {           $sql = 'DELETE FROM `sess` WHERE `expiry`<'.time();           self::$db->mysqlquery($sql);                   return true;     } } require_once('../init.php'); $db2 = new DB(); $sess = new sessdb($db2); $sess->init();

     //init.php方法是我自己写的操作数据库,网友可以自己写过

    使用的话,只需要这样就可以存入数据库:

    $_SESSION['a']='aaab'; $_SESSION['b']='bbb'; $_SESSION['c']='ccc'; $_SESSION['d']=array('111'=>111,'2222'=>'2222');

    大家有什么问题可以留言

       

      

    转载请注明原文地址: https://ju.6miu.com/read-24387.html

    最新回复(0)