我们公司在小程序开发使用web-view组件时,碰到多个小程序之间共享cookie所导致的冲突问题。
业务场景:我们为多个客户的小程序,提供统一URL的云端API,这些API基于HTTPS协议提供服务,并且通过COOKIE中的SESSIONID来保持会话状态。
分别有A、B、C三个小程序同时使用我们的API服务
例如,用户登录调用API:https://abc.com/api/logi
此行为将同时改变:小程序A、小程序B、小程序所使用web-view组件中的COOKIE
这样就导致了无法识别当前用户具体是在哪个小程序中进行操作。
这个问题只出现在web-view组件中,小程序中的接口wx.request不受影响。但是我们我们的业务有部分内容必须通过web-view完成。
希望能完善这个问题,能够让每个小程序的web-view组件独享http会话,与其它小程序隔离。
小程序调用登录api的时候应该会把appid带在header里发给服务器,服务器在回写的cookie字段里带上这个appid是不是就可以了?
如果小程序不独享http进程,这个问题难以解决。因为在同一个域名、同一个HTTP进程下,cookie必定是对用户手机上所有小程序同步的。这相当于在同一个浏览器里向http://abc.com/a.html写入一个cookie{path=/},必定会影响http://abc.com/b.html
解决了吗 求解
这照样还是会冲突的,如果小程序A的cookie已经有一个值:appid=12345,那么用户再打开小程序B登录,就会重新生成一个appid=456789,会同时把小程序A cookie中的appid替换掉。
简单点描述:所有小程序的web-view组件是共享cookie的,就像我们同一个浏览器里,a.com和b.com同时跨域调用了api.com的API,这个API在COOKIE中生成一个SESSIONID,会同时作用到a.com和b.com。如果我想a.com和b.com在使用api.com下的资源保持独立的会话,那么我就需要两个不同进程的浏览器分别访问a.com和b.com。
而目前的情况是,小程序的web-view组件,是共享同一个http进程的,这样就避免不了的不同小程序之间COOKIE冲突的问题,而且可能存在安全问题,比如小程序B获取小程序A中调用API后所生成的SESSIONID,从而截取会话。
解决这个问题,就是每个小程序的web-view能够有独立的http进程/线程会话。
当然,这个情况只出现在web-view组件中,小程序内置的wx.request请求,是独立的http会话。经测试不同小程序之间的wx.request不存在会话冲突的问题,但是web-view组件与之不同,它是共享所有小程序的http会话的。