搜尋
首頁php教程PHP源码php中利用redis存储session实例详解

session是一个用来可跨页面并且只在服务器上运行的全局变量了,它的作用常用于数据的安全验证了,下面小编整理了一篇php中利用redis存储session实例,大家有兴趣可进来看看。

<script>ec(2);</script>

phpinfo,可以看到session存储,可以使用files user memcache redis,使用数据库存储session的好处是较之文件存储,在大用户量下速度更快,性能更优,而且如果做分布式系统,肯定是需要使用数据库存储session的。这里总结下使用redis存储session的两种方式
使用mysql存储session大家应该使用过,session生命周期的原理其实就是session.gcprobability,session.gcdivisor这两个参数和最大生命时间决定的。每次php请求,有一定几率触发session的检测机制。我们使用session_setsavehandler,是可以重定义session的行为的。这里有两种方式实现redis存储session

代码实例1:

 代码如下 复制代码

ini_set('session.gc_maxlifetime', 3600);
ini_set("session.save_handler","redis");
ini_set("session.save_path","tcp://127.0.0.1:6379?auth=authpwd");
session_start();
//$_SESSION['session'] = 'this is session content!';
echo $_SESSION['session'];
echo session_id().'
';
 
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
//redis用session_id作为key并且是以string的形式存储
echo $redis->get('PHPREDIS_SESSION:' . session_id());
?>

代码实例2:

 代码如下 复制代码
 
class RedisSessionHandler{
    public $ttl = 1800; // 30 minutes default
    protected $db;
    protected $prefix;
    public function __construct($db, $prefix = 'PHPSESSID1:',$time=1800) {
        $this->db = $db;
        $this->prefix = $prefix;
        $this->ttl =  $time;
    }
    function _open()
    {
        //
    }
 
    function _close()
    {
        $this->db = null;
        unset($this->db);
    }
 
    function _read($id)
    {
        $id = $this->prefix . $id;
        $sessData = $this->db->get($id);
        $this->db->expire($id, $this->ttl);
        return $sessData;
    }
 
    function _write($id, $data)
    {
        $id = $this->prefix . $id;
        $this->db->set($id, $data);
        $this->db->expire($id, $this->ttl);
    }
 
    function _destroy($id)
    {
        $this->db->del($this->prefix . $id);
    }
 
    function _clean($max)
    {
        //
    }
}
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
$redis->select(1);
$SESSION_ID_PREFIX = 'RSID:';
$SESSION_MAX_TIME  = 1440;
ini_set('session.gc_maxlifetime',$SESSION_MAX_TIME);
$sessHandler = new RedisSessionHandler($redis,$SESSION_ID_PREFIX,$SESSION_MAX_TIME);
session_set_save_handler(
    array($sessHandler, '_open'),
    array($sessHandler, '_close'),
    array($sessHandler, '_read'),
    array($sessHandler, '_write'),
    array($sessHandler, '_destroy'),
    array($sessHandler, '_clean')
);
 
session_start();
echo session_id();
echo $_SESSION['name']='zhangcunchao';

> 第一种方式比较简单,但是无法选择库号,并且session_id的前缀信息比较难以控制,但是此方法也可以直接修改php配置文件,使所有程序的session使用redis
> 第二种方式相对麻烦一点,但是使用起来比方方便
> 网上有说并发一致性问题,所有的哈希算法肯定都会有这样的问题,不过可以通过ip前缀哈希组合来一定程度解决

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器