fdestroy = false; session_start(); } public function end() { // 会触发write 和 close 函数 session_write_close(); foreach($_SESSION as $key=>$value) { unset($_SESSION[$key]); } foreach($_COOKIE as $key=>$value) { unset($_COOKIE[$key]); } foreach($_SERVER as $key=>$value) { unset($_SERVER[$key]); } } public function destroy() { $this->fdestroy = true; //session_destroy();//会触发destroy 和 close 函数 } public function onOpen() { //Log::record("onOpen",Log::DEBUG); return true; } public function onRead($rsid) { //Log::record("onRead sid={$rsid}",Log::DEBUG); $sid = $_COOKIE[self::session_name]; //if(empty($sid) || $sid != $rsid) if(empty($sid)) { $ret = session_regenerate_id(false); if($ret) { dcache($rsid,self::prefix); $rsid = session_id(); $this->expire_time = time() + self::expire_min * 60; fcgi_setcookie("PHPSESSID","{$rsid}",$this->expire_time); } return ''; } else { $data = rcache($sid,self::prefix,self::session_name); if(empty($data)) { dcache($rsid,self::prefix); session_regenerate_id(false); $rsid = session_id(); $this->expire_time = time() + self::expire_min * 60; fcgi_setcookie("PHPSESSID","{$rsid}",$this->expire_time); return ''; } else { return $data[self::session_name]; } } } public function onClose() { return true; } public function onWrite($sid, $data) { if($this->fdestroy) { dcache($sid,self::prefix); } else { wcache($sid,array(self::session_name => $data),self::prefix,self::expire_min); } return true; } public function onDestroy($sid) { return dcache($sid,self::prefix); } public function onGc($expire) { return true; } }