php 如何以json格式存储session,而不是默认的内置编码?

 __wolf狼 发布于 2022-11-29 01:26

php如何以json格式存储session,而不是默认的内置编码?

折腾了下,即使session_save_handler被自己的类或者方法重写,write与read的出入数据都还是被序列化的,而且被session序列化不是一般的序列化...还是不能解解决memcached保存session数据为json的格式

2 个回答
  • 找到了方案:

    <?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);}}
    2022-11-29 01:50 回答
  • 可以考虑下写库

    2022-11-29 01:50 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有