<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. php語言

    php實現Session存儲到Redis

    時間:2025-02-15 01:51:27 php語言 我要投稿
    • 相關推薦

    php實現Session存儲到Redis

      介紹了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引擎采用內存表,所有數據存儲在內存,操作速度快

      <?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

      ?

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      //判斷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'];

      數據庫代碼

      ?

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      <?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

      <?php

      class 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'];

      以上就是詳細的介紹了php實現Session存儲到Redis的方法,希望對大家的學習有所幫助。

    【php實現Session存儲到Redis】相關文章:

    php中Session存儲到Redis的方法09-23

    PHP用Redis替代文件存儲Session的方法09-20

    關于PHP中session 存儲方式的詳細介紹07-31

    PHP實現多服務器共享SESSION 數據10-30

    PHP中使用session實現保存用戶登錄信息09-07

    Session在PHP中的使用07-24

    用PHP基于Redis消息隊列實現發布微博的方法08-30

    Javascript到PHP加密通訊的簡單實現07-23

    PHP語言中Session的概念08-03

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人