fdestroy = false; session_start(); $_SESSION['MPHPSESSID'] = $_COOKIE[self::session_name]; } 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($_POST as $key => $value) { unset($_POST[$key]); } foreach($_GET as $key => $value) { unset($_GET[$key]); } request_helper::clear_server(); $this->sessid = ''; } public function destroy() { $this->fdestroy = true; //session_destroy();//会触发destroy 和 close 函数 } public function onOpen() { return true; } public function onRead($rsid) { //这段代码为了确保内置H5,直接使用客户端的session 状态。 $sid = $_COOKIE[self::session_name]; Log::record("MPHPSESSID = {$sid}." , Log::DEBUG); if(isset($_POST['HPHPSESSID']) && !empty($_POST['HPHPSESSID'])) { $msid = $_POST['HPHPSESSID']; Log::record("HPHPSESSID = {$msid}." , Log::DEBUG); if($sid != $msid) { $sid = $msid; $this->set_cookie($sid); $_COOKIE[self::session_name] = $sid; } } if(empty($sid)) { $ret = session_regenerate_id(false); if($ret == true) { $sid = session_id(); $this->set_cookie($sid); $_COOKIE[self::session_name] = $sid; $this->sessid = $sid; } else { Log::record("session_regenerate_id error.",Log::ERR); } return ''; } else { $data = rcache($sid,self::prefix,self::session_name); if(empty($data)) { dcache($sid,self::prefix); $ret = session_regenerate_id(false); if($ret == true) { $sid = session_id(); $this->set_cookie($sid); $this->sessid = $sid; $_COOKIE[self::session_name] = $sid; } else { Log::record("session_regenerate_id error.",Log::ERR); } return ''; } else { $this->sessid = $sid; return $data[self::session_name]; } } } public function onClose() { return true; } public function onWrite($sid, $data) { if($this->fdestroy) { dcache($this->sessid,self::prefix); } else { wcache($this->sessid,array(self::session_name => $data),self::prefix,self::expire_min); } return true; } public function onDestroy($sid) { return dcache($this->sessid,self::prefix); } public function onGc($expire) { return true; } private function set_cookie($sid) { $this->expire_time = time() + self::expire_min * 60; if(is_localdebug()) { fcgi_setcookie("MPHPSESSID","{$sid}",$this->expire_time,'/',LOCAL_DOMAIN); } else { fcgi_setcookie("MPHPSESSID", "{$sid}", $this->expire_time, '/', '.lrlz.com'); } } }