同一个文件里:
我在A方法里,
$session = $request->session();
$session->set('session_key', $result['session_key']);
// $session_key = $session->get('session_key');
并且打印 $session_key 确认保存了。
我在B方法里:
$session = $request->session();
$session_key = $session->get('session_key');
$has = $session->has('session_key');
打印 $session_key 是 null , 打印 $has 是 false 。
为啥??
发一个能复现问题的完整代码和步骤
老大,我发了,您过目!
你这个我测不了。看下是不是每次请求都产生了一个新的session文件
是的
那应该是前端没传PHPSID的cookie
老大,这个貌似跟前端没关系,因为前段传code 过来,我从微信获取的数据,我打印是确定有session_key , 然后我才存到 session 里的。或者老大您告诉我应该咋解决,我菜鸟一枚!
session是依赖cookie实现的,浏览器每次请求会带上cookie,服务端就从cookie中得到session id,然后从磁盘或者redis找对应session id的文件或数据,才能还原上次记录的session
常识问题,小程序开发时候,是没有Session的。
虽然是给小程序写的接口,但是接口内部拿到数据,然后存到 session 里,在另一个方法不能调用?这说不通啊
你们前端太菜,后端也不理解session原理。
建议百度:wx.request cookie
老大也说:session是依赖cookie实现的,浏览器每次请求会带上cookie,服务端就从cookie中得到session id,然后从磁盘或者redis找对应session id的文件或数据,才能还原上次记录的session。
浏览器是支持cookie和session的,当服务器的响应头内包含Set-Cookie头时,浏览器会把里面的键值对保存起来,下次请求自动携带。
换句话说,小程序的wx.request只是发起请求,返回结果;需要你们的前端开发人员,解析出header头内容存储起来,下次请求时也携带。
【下面楼层,我做了一个中间件,可以用请求头内token值,作为session_id兼容webman的Session】
此中间件放到全局中间件内,兼容webman的session中间件。
原理是,用客户端请求头内的token,作为sid。
感谢大神,但是我还是没转过这弯,那如果我的代码跟前端没半毛钱关系,我如何使用 session , 我突然感觉我不会用session 了.....
session是依赖cookie实现的,浏览器每次请求会带上cookie,服务端就从cookie中得到session id,然后从磁盘或者redis找对应session id的文件或数据,才能还原上次记录的session