<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
            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

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院