欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

session 加入redis的實現(xiàn)代碼

 更新時間:2016年07月15日 15:10:52   投稿:lqh  
本篇文章主要介紹了session 加入redis 的實例,對session 進行了詳細介紹,并提供了代碼實例,需要的朋友可以參考下

Session信息入redis

Session簡介

session,中文經(jīng)常翻譯為會話,其本來的含義是 指有始有終的一系列動作/消息,比如打電話時從拿起電話撥號到掛斷電話這中間的一系列過程可以稱之為一個session。有時候我們可以看到這樣的話“在 一個瀏覽器會話期間,...”,這里的會話一詞用的就是其本義,是指從一個瀏覽器窗口打開到關(guān)閉這個期間①。最混亂的是“用戶(客戶端)在一次會話期間”這樣一句話,它可能指用戶的一系列動作(般情況下是同某個具體目的相關(guān)的一系列動作,比如從登錄到選購商品到結(jié)賬登出這樣一個網(wǎng)上購物的過程,有時候也被稱為一個transaction),然而有時候也可能僅僅是指一次連接,也有可能是指含義①,其中的差別只能靠上下文來推斷②。

在本文中,使用中文“瀏覽器會話期間”來表達含義①,使用“session機制”來表達含義④,使用“session”表達含義⑤,使用具體的“HttpSession”來表達含義⑥

為什么要把SESSION保存在緩存

就php來說,語言本身支持的session是以文件的方式保存到磁盤文件中,保存在指定的文件夾中,保存的路徑可以在配置文件中設置或者在程序中使用函數(shù)session_save_path()進行設置,但是這么做有弊端,
第一就是保存到文件系統(tǒng)中,效率低,只要有用到session就會從好多個文件中查找指定的sessionid,效率很低。
第二就是當用到多臺服務器的時候可能會出現(xiàn),session丟失問題(其實是保存在了其他服務器上)。
當然了,保存在緩存中可以解決上面的問題,如果使用php本身的session函數(shù),可以使用 session_set_save_handler()函數(shù)很方便的對session的處理過程進行重新控制。如果不用php的session系列函數(shù), 可以自己編寫個類似的session函數(shù),也是可以的,我現(xiàn)在做的這個項目就是這樣,會根據(jù)用戶的mid、登錄時間進行求hash作為 sessionId,每次請求的時候都必須加上sessionId才算合法(第一次登錄的時候是不需要的,這個時候會創(chuàng)建sessionId,返回給客戶 端),這么做也很方便、簡潔高效的。當然了,我這篇文章主要說的是在php自身的SESSION中”做做手腳”。

SESSION保存在緩存中

php將緩存保存到redis中,可以使用配置文件,對session的處理和保存做修改,當然了,在程序中使用ini_set()函數(shù)去修改也可以,這個很方便測試,我這里就使用這種方式,當然了,要是生產(chǎn)環(huán)境還是建議使用配置文件。

如果想簡單操作session入redis操作可以將一下代碼運行一下

<?php 
 
ini_set("session.save_handler", "redis"); 
 
ini_set("session.save_path", "tcp://localhost:6379"); 
 
session_start(); 
 
header("Content-type:text/html;charset=utf-8"); 
 
if(isset($_SESSION['view'])){ 
 
  $_SESSION['view'] = $_SESSION['view'] + 1; 
 
}else{ 
 
  $_SESSION['view'] = 1; 
 
} 
 
echo "【view】{$_SESSION['view']}"; 
 
//這里設置session.save_handler方式為redis,session.save_path為redis的地址和端口,設置之后刷新,再回頭查看redis,會發(fā)現(xiàn)redis中的生成了sessionId,sessionId和瀏覽器請求的是一樣的, 
 
  
 
//也可以使用 
 
Session_set_save_handler(‘open','close',' read',' write',' destory',' gc'); 
 
//用法如下自定義一個Redis_session類 
 
<?php 
 
class RedisSession{ 
 
  private $_redis = array( 
 
    'handler' => null, //數(shù)據(jù)庫連接句柄 
 
    'host' => null,  //redis端口號 
 
    'port' => null, 
 
  ); 
 
  public function __construct($array = array()){ 
 
    isset($array['host'])?$array['host']:"false"; 
 
    isset($array['port'])?$array['host']:"false"; 
 
    $this->_redis = array_merge($this->_redis, $array); 
 
  } 
 
  public function begin(){ 
 
    //設置session處理函數(shù) 
 
    session_set_save_handler( 
 
      array($this, 'open'), 
 
      array($this, 'close'), 
 
      array($this, 'read'), 
 
      array($this, 'write'), 
 
      array($this, 'destory'), 
 
      array($this, 'gc') 
 
    ); 
 
  } 
 
  public function open(){ 
 
    $redis = new Redis(); 
 
    $redis->connect($this->_redis['host'], $this->_redis['port']); 
 
    if(!$redis){ 
 
      return false; 
 
    } 
 
  
 
    $this->_redis['handler'] = $redis; 
 
    $this->gc(null); 
 
    return true; 
 
  } 
 
  //關(guān) 
 
  public function close(){ 
 
    return $this->_redis['handler']->close(); 
 
  } 
 
  //讀 
 
  public function read($session_id){ 
 
    return $this->_redis['handler']->get($session_id); 
 
  } 
 
  //寫 
 
  public function write($sessionId, $sessionData){ 
 
    return $this->_redis['handler']->set($sessionId, $sessionData); 
 
  } 
 
  public function destory($sessionId){ 
 
    return $this->_redis['handler']->delete($sessionId) >= 1 ? true : false; 
 
  } 
 
  public function gc(){ 
 
    //獲取所有sessionid,讓過期的釋放掉 
 
    $this->_redis['handler']->keys("*"); 
 
    return true; 
 
  } 
 
} 
 
$ses = new RedisSession(array('host'=>'127.0.0.1','port'=>'6379')); 
 
$ses->begin(); 
 
session_start(); 
 
$_SESSION['name']='zhangsan'; 
 
echo $_SESSION['name']; 

這樣就可以實現(xiàn)session數(shù)據(jù)如redis代碼執(zhí)行過程中必須安裝redis才可以。

相關(guān)文章

  • php實現(xiàn)下載限制速度示例分享

    php實現(xiàn)下載限制速度示例分享

    這篇文章主要介紹了php實現(xiàn)限制下載速度的示例,需要的朋友可以參考下
    2014-02-02
  • PHP tp5中使用原生sql查詢代碼實例

    PHP tp5中使用原生sql查詢代碼實例

    這篇文章主要介紹了PHP tp5中使用原生sql查詢代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • CodeIgniter視圖使用注意事項

    CodeIgniter視圖使用注意事項

    這篇文章主要介紹了CodeIgniter視圖使用注意事項,分析說明了CodeIgniter視圖的加載、定義及模板與函數(shù)的使用方法,需要的朋友可以參考下
    2016-01-01
  • PHP實現(xiàn)QQ登錄實例代碼

    PHP實現(xiàn)QQ登錄實例代碼

    分享一段利用PHP實現(xiàn)QQ登陸的代碼,原理是用curl模擬發(fā)送post登錄,cookie保存本地,實現(xiàn)真正的3GQQ登陸,對php實現(xiàn)qq登錄相關(guān)知識感興趣的朋友一起學習吧
    2016-01-01
  • PHP獲取當前時間的5種實現(xiàn)方式

    PHP獲取當前時間的5種實現(xiàn)方式

    這篇文章主要介紹了PHP獲取當前時間的5種實現(xiàn)方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • 使用php清除bom示例

    使用php清除bom示例

    本文主要介紹了使用PHP去除文件BOM頭的的示例,需要的朋友可以參考下
    2014-03-03
  • PHP實現(xiàn)財務審核通過后返現(xiàn)金額到客戶的功能

    PHP實現(xiàn)財務審核通過后返現(xiàn)金額到客戶的功能

    有這么一個返現(xiàn)的系統(tǒng),當前端客戶發(fā)起提現(xiàn)的時候,后端就要通過審核這筆返現(xiàn)訂單,才可以返現(xiàn)到客戶的賬號里。這篇文章主要介紹了PHP實現(xiàn)財務審核通過后返現(xiàn)金額到客戶 ,需要的朋友可以參考下
    2019-07-07
  • TP5框架實現(xiàn)的數(shù)據(jù)庫備份功能示例

    TP5框架實現(xiàn)的數(shù)據(jù)庫備份功能示例

    這篇文章主要介紹了TP5框架實現(xiàn)的數(shù)據(jù)庫備份功能,結(jié)合實例形式分析了TP5數(shù)據(jù)庫備份功能相關(guān)原理及實現(xiàn)方法,需要的朋友可以參考下
    2020-04-04
  • PHP curl使用實例

    PHP curl使用實例

    這篇文章主要介紹了PHP curl使用實例,本文直接給出一個實例,演示直接輸出到瀏覽器和不直接輸出到瀏覽器的不同寫法,需要的朋友可以參考下
    2015-07-07
  • thinkPHP簡單導入和使用阿里云OSSsdk的方法

    thinkPHP簡單導入和使用阿里云OSSsdk的方法

    這篇文章主要介紹了thinkPHP簡單導入和使用阿里云OSSsdk的方法,簡單說明了阿里云OSS的php sdk下載地址及thinkPHP導入與使用OSSsdk的方法,需要的朋友可以參考下
    2017-03-03

最新評論