收藏
回答

关于小程序webview共享http会话的冲突问题

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 需求 web-view 客户端 全部 Set-Cookie:sessionid=12345

我们公司在小程序开发使用web-view组件时,碰到多个小程序之间共享cookie所导致的冲突问题。

业务场景:我们为多个客户的小程序,提供统一URL的云端API,这些API基于HTTPS协议提供服务,并且通过COOKIE中的SESSIONID来保持会话状态。

分别有A、B、C三个小程序同时使用我们的API服务

例如,用户登录调用API:https://abc.com/api/login,这个API将在COOKIE中设置一个SESSIONID来保持会话状态。 Set-Cookie:sessionid=12345

此行为将同时改变:小程序A、小程序B、小程序所使用web-view组件中的COOKIE

这样就导致了无法识别当前用户具体是在哪个小程序中进行操作。

这个问题只出现在web-view组件中,小程序中的接口wx.request不受影响。但是我们我们的业务有部分内容必须通过web-view完成。

希望能完善这个问题,能够让每个小程序的web-view组件独享http会话,与其它小程序隔离。


回答关注问题邀请回答
收藏

2 个回答

  • 僵尸浩
    僵尸浩
    2019-01-08

    小程序调用登录api的时候应该会把appid带在header里发给服务器,服务器在回写的cookie字段里带上这个appid是不是就可以了?

    2019-01-08
    有用
    回复 1
    • Kevin-语音信息将被后置处理
      Kevin-语音信息将被后置处理
      2019-03-05

      如果小程序不独享http进程,这个问题难以解决。因为在同一个域名、同一个HTTP进程下,cookie必定是对用户手机上所有小程序同步的。这相当于在同一个浏览器里向http://abc.com/a.html写入一个cookie{path=/},必定会影响http://abc.com/b.html


      2019-03-05
      回复
  • Kevin-语音信息将被后置处理
    Kevin-语音信息将被后置处理
    2019-01-11

    这照样还是会冲突的,如果小程序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进程/线程会话。

    2019-01-11
    有用
    回复 1
    • Kevin-语音信息将被后置处理
      Kevin-语音信息将被后置处理
      2019-01-11

      当然,这个情况只出现在web-view组件中,小程序内置的wx.request请求,是独立的http会话。经测试不同小程序之间的wx.request不存在会话冲突的问题,但是web-view组件与之不同,它是共享所有小程序的http会话的。

      2019-01-11
      回复
登录 后发表内容