最近把代码迁移到分布式服务器,用session_set_save_handler()函数注册了自定义的会话存储函数。php脚本执行结束时就会把$_SESSION数组中的内容进行序列化并保存到由session_id指定的key中,是string类型。
后来觉得这样会出现并发问题,例如两个脚本同时去修改$_SESSION数组。PHP默认是用文件来保存session数据的,会加锁,所以不会出现这样的问题。
后来就想到用hash类型来保存session,似乎很perfect。session的write函数每次拿到$data变量的内容都要反序列化得到原本的结构,并保存到hash中。但后来想到如果$_SESSION数组中某个key对应的value不是string类型,那也是会出问题。
后来也觉得write函数每次这样去反序列化也是很麻烦。虽然得知是可以修改PHP的session编码方式,但是wirte函数接收的$data参数只能是string,然并卵。
各位朋友,怎么样可以既解决并发问题,又可以用最适合的redis类型去存放session呢?求建议!谢谢!
我的问题session
并发问题的话,操作之前加个锁