php基于redis處理session的方法
一個(gè)基于redis的處理session的方法,如下。
<?php class Session_custom { private $redis; // redis實(shí)例 private $prefix = 'sess_'; // session_id前綴 // 會(huì)話開(kāi)始時(shí),會(huì)執(zhí)行該方法,連接redis服務(wù)器 public function open($path, $name) { $this->redis = new Redis(); return $this->redis->connect("127.0.0.1",6379); } // 會(huì)話結(jié)束時(shí),調(diào)用該方法,關(guān)閉redis連接 public function close() { $this->redis->close(); return true; } // 會(huì)話保存數(shù)據(jù)時(shí)調(diào)用該方法,在腳本執(zhí)行完或session_write_close方法調(diào)用之后調(diào)用 public function write($session_id, $data) { return $this->redis->hMSet($this->prefix.$session_id, array('expires' => time(), 'data' => $data)); } // 在自動(dòng)開(kāi)始會(huì)話或者通過(guò)調(diào)用 session_start() 函數(shù)手動(dòng)開(kāi)始會(huì)話之后,PHP 內(nèi)部調(diào)用 read 回調(diào)函數(shù)來(lái)獲取會(huì)話數(shù)據(jù)。 public function read($session_id) { if($this->redis->exists($this->prefix.$session_id)) { return $this->redis->hGet($this->prefix.$session_id, 'data'); } return ''; } // 清除會(huì)話中的數(shù)據(jù),當(dāng)調(diào)用session_destroy()函數(shù),或者調(diào)用 session_regenerate_id()函數(shù)并且設(shè)置 destroy 參數(shù)為 TRUE 時(shí),會(huì)調(diào)用此回調(diào)函數(shù)。 public function destroy($session_id) { if($this->redis->exists($this->prefix.$session_id)) { return $this->redis->del($this->prefix.$session_id) > 0 ? true : false; } return true; } // 垃圾回收函數(shù),調(diào)用周期由 session.gc_probability 和 session.gc_divisor 參數(shù)控制 public function gc($maxlifetime) { $allKeys = $this->redis->keys("{$this->prefix}*"); foreach($allKeys as $key) { if($this->redis->exists($key) && $this->redis->hGet($key, 'expires') + $maxlifetime < time()) { $this->redis->del($key); } } return true; } } // 調(diào)用自定義的session處理方法 $handler = new Session_custom(); session_set_save_handler( array($handler, 'open'), array($handler, 'close'), array($handler, 'read'), array($handler, 'write'), array($handler, 'destroy'), array($handler, 'gc') ); // 下面這行代碼可以防止使用對(duì)象作為會(huì)話保存管理器時(shí)可能引發(fā)的非預(yù)期行為,表示當(dāng)腳本執(zhí)行之后或調(diào)用exit()之后,存儲(chǔ)當(dāng)前會(huì)話數(shù)據(jù)并關(guān)閉當(dāng)前會(huì)話 register_shutdown_function('session_write_close'); session_start(); // 可以使用session了
補(bǔ)充:
php.ini文件中的session.gc_probability與session.gc_divisor兩個(gè)配置選項(xiàng)共同決定gc函數(shù)調(diào)用的時(shí)機(jī)。默認(rèn)值分為為1和1000,表示每個(gè)請(qǐng)求只有1/1000的機(jī)會(huì)調(diào)用gc函數(shù)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。
相關(guān)文章
js實(shí)現(xiàn)前端界面導(dǎo)航欄下拉列表
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)前端界面導(dǎo)航欄下拉列表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08js判斷IE6/IE7/FF的代碼[XMLHttpRequest]
js下通過(guò)XMLHttpRequest判斷IE6/IE7/FF的代碼,需要的朋友可以參考下。2011-02-02JS使用正則表達(dá)式過(guò)濾多個(gè)詞語(yǔ)并替換為相同長(zhǎng)度星號(hào)的方法
這篇文章主要介紹了JS使用正則表達(dá)式過(guò)濾多個(gè)詞語(yǔ)并替換為相同長(zhǎng)度星號(hào)的方法,涉及javascript字符串與正則替換操作相關(guān)技巧,需要的朋友可以參考下2016-08-08靈活使用console讓js調(diào)試更簡(jiǎn)單的方法步驟
這篇文章主要介紹了靈活使用console讓js調(diào)試更簡(jiǎn)單的方法步驟,適當(dāng)使用這些方法可以使調(diào)試更容易,更快速,更直觀,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-04-04微信小程序?qū)崿F(xiàn)列表頁(yè)的點(diǎn)贊和取消點(diǎn)贊功能
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)列表頁(yè)的點(diǎn)贊和取消點(diǎn)贊功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11