workerman Http类的session经常报错 unserialize(): Error at offset 0 of 156 bytes

479820787

unserialize(): Error at offset 0 of 156 bytes in file F:\my\layGateIm\im-for-gateway\vendor\workerman\workerman\Protocols\Http.php on
分析原因:英文数据中含有中文字符串,所以我们就可以想到编码的问题,serialize()函数对在不同编码下对中文的处理结果是不一样的。
再讲gbk转换成utf8的格式后,每个中文的编码数从2个会增加到3个,所以会导致反序列化的时候判断字符长度出现问题 。
建议更换成json处理或者其他方式。

阅读 2219
2个回答

xiuwang

json 貌似只能是utf8,其它编码不支持吧

  • 479820787 2018-08-10

    查的资料一般都序列化之前先转出base64然后再序列化

walkor

感谢反馈,不过这个问题应该不是serialize编码问题,有可能是并发读写session文件导致的

  • 479820787 2018-08-10

    那有什么办法解决么是不是加锁就可以了?

  • walkor 2018-08-10

    应该要加一个锁

  • 479820787 2018-08-13

    找到原因了,因为我同时用了apache和webhttp,偶尔会出现他俩拿到的session文件名一样,自带的apache去写了一遍这个session文件,然后格式就不对了,我把前缀sess_改成worker_sess_就好了

  • walkor 2018-08-13

    好的,感谢反馈