php如何以json格式存储session,而不是默认的内置编码?
折腾了下,即使session_save_handler被自己的类或者方法重写,write与read的出入数据都还是被序列化的,而且被session序列化不是一般的序列化...还是不能解解决memcached保存session数据为json的格式
找到了方案:
<?phpnamespaceLboy\Session\SaveHandler;/***MemcachedJSON-formattedsessionsavehandler**Thedefaultmemcachesessionsavehandlerstoressessionsencodedwith*session_encode,buttheencodedsessionisnotsimpletoparseinother*languages.Therefore,thisclassencodesthesessioninJSONtomakereading*thesessioninotherlanguagessimple.**Note:Thisclassusesthenewerphp-memcachedextension,notphp-memcache!*@seehttp://php.net/manual/en/book.memcached.php**@authorLeeBoynton<lee@lboynton.com>*/classMemcached{/***@var\Memcached*/protected$memcached;/***Createnewmemcachedsessionsavehandler*@param\Memcached$memcached*/publicfunction__construct(\Memcached$memcached){$this->memcached=$memcached;}/***Closesession**@returnboolean*/publicfunctionclose(){returntrue;}/***Destroysession**@paramstring$id*@returnboolean*/publicfunctiondestroy($id){return$this->memcached->delete("sessions/{$id}");}/***Garbagecollect.Memcachehandlesthiswithexpirationtimes.**@paramint$maxlifetime*@returnbooleanAlwaystrue*/publicfunctiongc($maxlifetime){//letmemcachedhandlethiswithexpirationtimereturntrue;}/***Opensession**@paramstring$savePath*@paramstring$name*@returnboolean*/publicfunctionopen($savePath,$name){//Note:sessionsavepathisnotused$this->sessionName=$name;$this->lifetime=ini_get('session.gc_maxlifetime');returntrue;}/***Readsessiondata**@paramstring$id*@returnstring*/publicfunctionread($id){$_SESSION=json_decode($this->memcached->get("sessions/{$id}"),true);if(isset($_SESSION)&&!empty($_SESSION)&&$_SESSION!=null){returnsession_encode();}return'';}/***Writesessiondata**@paramstring$id*@paramstring$data*@returnboolean*/publicfunctionwrite($id,$data){//note:$dataisnotusedasithasalreadybeenserialisedbyPHP,//soweuse$_SESSIONwhichisanunserialisedversionof$data.return$this->memcached->set("sessions/{$id}",json_encode($_SESSION),$this->lifetime);}}
可以考虑下写库