阿卢说他遇
阿卢说他遇
  • 发布:2020-03-26 16:02
  • 更新:2020-04-11 16:16
  • 阅读:1266

【报Bug】在app设置的cookie在服务端程序获取不到,更新开发工具之前还是正常的

分类:HBuilderX

详细问题描述

我通过app中设置cookie,访问服务页页面时,后端程序接收到页面请求但获取不到cookie。
测试发现,后端程序自身和旧版本开发工具运行和打包的app所设置的cookie是可以在后端程序里获取到,相关的app代码在两个开发工具版本之间并没有改动。

重现步骤

1、通过plus对象在app页面中存储cookie;
2、同样通过plus对象检查cookie是否存储成功;(结果成功)
3、访问步骤1存储cookie对应的域名页面;
4、对应的后端程序获取到页面请求,尝试获取传递的cookie;(结果获取不到)
5、在步骤3访问的页面里通过plus对象检查当前域(location.origin)的cookie是否存在;(结果存在)
6、在步骤3访问的页面里通过document.cookie检查cookie是否存在;(结果不存在)

结果

我用两个app各自两个版本做测试,
一个是前年就没有更新,到今天测试登录功能仍然正常的,但用新版本的开发工具打包后就没法正常登录;
另外一个是今年1月份打包的,到现在登录功能仍然正常,之后经过修改(没有改动到cookie存储或读取)于3月25号打包,但由于发现cookie读取不正常,所以无法发布。

期望

在后端程序中应当能正常获取到app设置的cookie。

IDE运行环境说明

HBuilder X 2.6.1.20200226

macOS Catalina 10.15.3 (19D76)

App运行环境说明

安卓手机:ONEPLUS A3000 Android 9(不正常)
苹果手机(模拟器):Simulator Version 11.4 (921.9) iphone8 iOS 13.4(不正常)
苹果手机:iPhone 6s iOS 13.3.1(正常)

附件

[可重现代码片段]
```
document.addEventListener('plusready', function(){
var origin = "http://192.168.44.229:10010/";
var ext = new Date();
ext.setTime(ext.getTime() + 30 24 60 60 1000);
var cookieValue = "id_member_shopbest=701E2D1F4A58501F; expires=" + ext.toUTCString() + "; path=/";
plus.navigator.setCookie(origin, cookieValue);
document.getElementById("cookie").innerText = plus.navigator.getCookie(origin);
});

/// <a href="http://192.168.44.229:10010/mobi/cn/goods_list.html">跳转服务器页面</a>
```

联系方式

[QQ]
1269709977

2020-03-26 16:02 负责人:无 分享
已邀请:
阿卢说他遇

阿卢说他遇 (作者) - 做网站、设计、应用程序等,喜欢美好的体验

官方是没人看到还是已经在处理了?没人回复感觉好慌,都过去几天了。

阿卢说他遇

阿卢说他遇 (作者) - 做网站、设计、应用程序等,喜欢美好的体验

今天是2020年4月1日,我更新了最新版(版本号:2.6.8.20200330),然后用公共测试证书打包安卓安装包到手机上测试依然是无法正常获取到cookie,有官方人员看到吗?

阿卢说他遇

阿卢说他遇 (作者) - 做网站、设计、应用程序等,喜欢美好的体验

除了官方,其他人有遇到这种情况吗,是怎么解决的

x***@qq.com

x***@qq.com - 疑问?的小纳?

cookie在请求的时候会自动被带到服务器端的,你这接收不到应该是个bug,不要慌,官方应该正在解决,要不先放本地存储里面试试

  • 阿卢说他遇 (作者)

    主要是手上有几个App项目要更新,并且都是要通过后端程序获取cookie的,而后端程序是对接多个端的,不太可能为了一个端的BUG去修改所有端的存取方式。官方没回应所以才让我很慌,要是官方有回应说已经在处理那我就可以放心,怕的是官方根本不知道这个情况。

    2020-04-02 10:00

DCloud_Android_ST

DCloud_Android_ST

HX哪个版本没有cookie问题?

  • 阿卢说他遇 (作者)

    具体哪个版本是正常的我不清楚,但最近一次还能正常读取cookie的是‎2020‎年‎1‎月‎18‎日通过云端打包的app安装包,我下一次更新HX并打包就是3月25号了。

    一般我打包前都会更新HX到最新版本,所以打包日期能对应当时已发布的HX最新版本。

    2020-04-02 11:25

  • DCloud_Android_ST

    回复 阿卢说他遇: appid提供下

    2020-04-02 14:29

  • 阿卢说他遇 (作者)

    回复 DCloud_Android_ST: id是这个:io.dcloud.shopbest

    2020-04-02 14:58

  • DCloud_Android_ST

    回复 阿卢说他遇: apk直接发下吧 你这id没发现有云打包记录

    2020-04-02 15:04

  • 阿卢说他遇 (作者)

    回复 DCloud_Android_ST: 上传不了,提示说是文件太大,这是下载网址:http://www.micronet.com.cn/file/app/micronet.apk,如果你是要测试的话,我正文里附带的代码片段就已经试出不正常了。

    2020-04-02 15:35

  • DCloud_Android_ST

    回复 阿卢说他遇: 目前测试 getCookie为null是问题原因吧

    2020-04-02 15:43

  • 阿卢说他遇 (作者)

    回复 DCloud_Android_ST: 我在重现步骤里有提到,用plus对象的getCookie是能获取到,但访问该cookie所在域的页面,后端程序在页面请求里拿不到设置的cookie

    2020-04-02 15:49

阿卢说他遇

阿卢说他遇 (作者) - 做网站、设计、应用程序等,喜欢美好的体验

2020年4月6号,使用新发布的版本(2.6.9.20200403)在iOS模拟器上测试,问题依然存在。

  • DCloud_Android_ST

    用HX2.6.10试下

    2020-04-07 16:05

  • 阿卢说他遇 (作者)

    回复 DCloud_Android_ST: 刚使用 2.6.10运行和打包,测试访问服务器页面时,后端程序能正常获取到 cookie 了,但在 Android 中使用 getCookie 方法结果为 null,iOS 则是能正常读取。

    2020-04-07 16:44

  • DCloud_Android_ST

    回复 阿卢说他遇: 你是setCookie完毕后立即在调用getCookie 吗?

    2020-04-07 17:08

  • 阿卢说他遇 (作者)

    回复 DCloud_Android_ST: 对的。我是用正文中重现代码去测试的,实际应用中也是差不多设置完后不到300毫秒就会再次获取作为判断。是因为 getCookie 在 android 上有延迟吗,时间大约是多少秒或者是根据什么决定延迟的?

    2020-04-07 17:16

  • DCloud_Android_ST

    回复 阿卢说他遇: setCookie是异步方法需要等一段时间再get

    2020-04-07 17:36

  • 阿卢说他遇 (作者)

    回复 DCloud_Android_ST: 我今天又尝试将前几天测试结果为不正常的安装包安装到昨天安装过正常版本apk的手机上,但发现现在也是能获取到cookie,想知道卸载应用后cookie也是保留着的吗?似乎是某个时刻能正常设置,之后由于cookie一直存在所以测试都正常,但更换一个域名就发现不正常了。

    2020-04-09 18:13

  • DCloud_Android_ST

    回复 阿卢说他遇: 卸载后就没了。不要频繁设置cookie会导致set失败。

    2020-04-09 18:23

  • 阿卢说他遇 (作者)

    回复 DCloud_Android_ST: 没有频繁设置,只在进入应用相关页面时设置一次,我刚用2.6.11版本的HBuilderX试了iOS模拟器和Android模拟器,在Android是正常的,但在iOS还是不正常,具体情形是app使用getCookie能获取到值(代表设置成功了?),但访问服务器页面时依然是获取不到。

    2020-04-10 09:50

阿卢说他遇

阿卢说他遇 (作者) - 做网站、设计、应用程序等,喜欢美好的体验

刚看到了这篇文章:https://ask.dcloud.net.cn/article/36348,里面提到从HBuilderX 2.2.5起,iOS上默认均已经是WKWebview,而使用 WKWebview 不支持 plus.navigator.setCookie。
而我尝试过无论使用 WKWebview 还是 UIWebview 都能调用 setCookie 接口(不会有错误),并且通过 getCookie 能获取到设置的cookie,只是访问网站页面时后端程序获取不到,这应该是无关吧?

该问题目前已经被锁定, 无法添加新回复