利用session_set_save_handler可以注册我们自己的Session处理逻辑,其调用的顺序,正常如下:
open –> read –> register_shutdown_function –> write –> close
但在利用Memcache时,在read 中调用get,如果不存在就会返回false,导致write 的不调用:
function read($sid) {
// 返回key对应的存储元素的字符串值或者在失败或key未找到的时候返回FALSE。
return $this->obj->get($sid);
}
正确的处理方式应该是:
function read($sid) {
return strval($this->obj->get($sid));
}
见read 函数的说明:
链接:http://php.net/manual/zh/function.session-set-save-handler.php
read(string $sessionId)
如果会话中有数据,read 回调函数必须返回将会话数据编码(序列化)后的字符串。 如果会话中没有数据,read 回调函数返回空字符串。