国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Redis > 正文

用redis實現跨服務器session

2020-03-22 17:49:26
字體:
來源:轉載
供稿:網友
  • 這個月我們新開發了一個項目,由于使用到了4臺機器做web,使用dns做負載均衡,


    上面圖上用戶通過DNS的調度(一個域名對應多個ip)分別訪問到VM2-VM5上,四臺機器都訪問VM1上的redis,兩個redis值主從結構.
    因此需要使用跨服務器的session保存用戶登錄狀態,于是我寫了一個跨站的session共享的類

    <?php    /*     *用redis實現跨服務器session     *注意需要安裝phpredis模塊     *     *作者:yifangyouwww.it165.net     *日期:2012-07-23 22:55:00    **/html' target='_blank'>class RedisSession{    var $expire=86400;//過期時間    var $sso_session;//session id    var $session_folder;//session目錄    var $cookie_name;//cookie的名字    var $redis;//redis連接    var $cache;//緩存session    var $expireAt;//過期時間    /*     *初始化     *參數     *$redis:php_redis的類實例     *$cookie_name:cookie的名字     *$session_id_prefix:sesion id的前綴    **/    function RedisSession($redis,$expire=86400,$cookie_name="sso_session",$session_id_prefix=""){        $this->redis=$redis;        $this->cookie_name=$cookie_name;        $this->session_folder="sso_session:";    //若是cookie已經存在則以它為session的id        if(isset($_COOKIE[$this->cookie_name])){             $this->sso_session=$_COOKIE[$this->cookie_name];        }else{            $this->expire=$expire;            $this->expireAt=time()+$this->expire;         //在IE6下的iframe無法獲取到cookie,于是我使用了get方式傳遞了cookie的名字            if(isset($_GET[$this->cookie_name])){                    $this->sso_session=$_GET[$this->cookie_name];            }else{                    $this->sso_session=$this->session_folder.$session_prefix.md5(uniqid(rand(), true));                }            setcookie($this->cookie_name,$this->sso_session,$this->expireAt,"/");        }    }        /*     *設置過期時間     *參數    **/    function expire($expire=86400){            $this->expire=$expire;            $this->expireAt=time()+$this->expire;            //設置session過期時間            setcookie($this->cookie_name,$this->sso_session,$this->expireAt,"/",".greatwallwine.com.cn");            $this->redis->expireAt($this->sso_session, $this->expireAt);    }        /*     *設置多個session的值     *參數     *$array:值    **/    function setMutil($array){        $this->redis->hMset($this->sso_session,$array);    }    /*     *設置session的值     *參數     *$key:session的key     *$value:值    **/    function set($key,$value){        $this->redis->hSet($this->sso_session,$key,$value);    }    /*     *設置session的值為對象     *參數     *$key:session的key     *$object:對象    **/    function setObject($key,$object){        $this->redis->hSet($this->sso_session,$key,serialize($object));    }        /*     *獲取全部session的key和value     @return: array    **/    function getAll(){        return $this->redis->hGetAll($this->sso_session);    }                /*     *獲取一個session的key和value     @return: array    **/    function get($key){        return $this->redis->hGet($this->sso_session,$key);    }      /*     *獲取session的值為對象     *參數     *$key:session的key     *$value:cookie的名字    **/    function getObject($key){        return unserialize($this->redis->hGet($this->sso_session,$key));    }    /*     *從緩存中獲取一個session的key和value     @return: array    **/    function getFromCache($key){        if(!isset($this->cache)){            $this->cache=$this->getAll();        }        return $this->cache[$key];    }        /*     *刪除一個session的key和value     @return: array    **/    function del($key){        return $this->redis->hDel($this->sso_session,$key);    }    /*     *刪除所有session的key和value     @return: array    **/    function delAll(){        return $this->redis->delete($this->sso_session);    }}?>

    使用方法:
    <?phperror_reporting(0);$redisHost="192.168.1.2";$redisPort="6379";$redis = new Redis();$redis->connect($redisHost,$redisPort);include_once("inc/RedisSession.php");$redisSession=new RedisSession($redis);/*$redisSession->set("name","sdf4");$redisSession->set("age",1234);$redisSession->set("***","man14");$redisSession->set("name","abc4");$redisSession->setMutil(array("province"=>"guangdong","city"=>"guangzhou"));*/$redisSession->setObject("obj",array("test1"=>array("test2")));$obj=$redisSession->getObject("obj");print_r($obj);die();print_r($redisSession->getAll());//$redisSession->del("name");print_r($redisSession->get("name"));//print_r($redisSession->get("province"));//$redisSession->delAll();//print_r($redisSession->getAll());print_r($redisSession->getFromCache("name"));/*    $redisSession->del("name");    $redisSession->delAll();*/

    比較常用的估計是set,get,setObject,getOject
    我用sso_session:我主要是方便用phpRedisAdmin管理


    PHP編程

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 樟树市| 庄河市| 沂南县| 巴彦县| 思茅市| 麻城市| 黎城县| 双城市| 尼玛县| 龙江县| 尚义县| 永和县| 呼伦贝尔市| 二连浩特市| 英德市| 资中县| 鹤岗市| 清镇市| 平和县| 莫力| 彭州市| 繁峙县| 康乐县| 盖州市| 台州市| 古浪县| 政和县| 桦甸市| 巴林右旗| 九龙坡区| 永昌县| 桑日县| 澄江县| 武功县| 平阳县| 仲巴县| 读书| 额敏县| 深州市| 开化县| 巴彦淖尔市|