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