uni-app 当程序里面嵌入webview时 嵌入的页面cookie如果开启了samesite:none,secure:true;那么不能在内置浏览器正常运行

uni-app 当程序里面嵌入webview时 嵌入的页面cookie如果开启了samesite:none,secure:true;那么不能在内置浏览器正常运行

测试过的手机:

没有测试手机

操作步骤:

  • 创建uniapp项目
  • 在项目中使用webview
  • webview中使用ajax请求服务器,服务器设置cookie
  • 如果服务器的cookie的配置为:samesite:none,secure:true,那么在内置浏览器中无法正常设置cookie
  • 此时在谷歌浏览器预览是正常的
  • 如果服务器不设置samesite,secure,那么在内置浏览器中是正常的,但是在谷歌浏览器中因为安全策略,不能使用

预期结果:

在开发时在谷歌浏览器正常预览执行,也能在内置浏览器中正常

实际结果:

当按照谷歌浏览器的安全策略设置cookie时,内置浏览器会出问题.

bug描述:

正在开发一个uniapp程序, 程序中使用webview嵌入了一个页面, 使用内置浏览器时: 这个页面的cookie开启了samesite:none,secure:true,那么这个cookie无法正常保存下来. 可以看附件页面,这个请求是webview内部的js发起的请求,不是uniapp的代码.

如果关闭samesite:none,secure:true,那么在内置浏览器里面是正常的,但是不能在谷歌浏览器内正常使用,因为谷歌的安全策略.

这个可能是由于内置浏览器的问题导致的.

为什么一定要设置samesite:none,secure:true? 因为谷歌的安全策略,默认的情况下,只允许一级域名相同的网站正常使用iframe,比如baidu.com,www.baidu.com. 在开发过程中,浏览器的域名为:localhost:8000,webview的地址为正常域名,比如:baidu.com 这时并不能在谷歌浏览器中正常设置cookie.

开发环境 版本号 项目创建方式
Windows 10 HBuilderX
HBuilderX 3.2.16 Vue2

Image Image


更多关于uni-app 当程序里面嵌入webview时 嵌入的页面cookie如果开启了samesite:none,secure:true;那么不能在内置浏览器正常运行的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 当程序里面嵌入webview时 嵌入的页面cookie如果开启了samesite:none,secure:true;那么不能在内置浏览器正常运行的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这个问题是由于不同浏览器对Cookie安全策略的实现差异导致的。

核心原因分析:

  1. 内置浏览器(WebView)SameSite=None; Secure=true 的支持可能不完整或存在兼容性问题,尤其是在某些Android版本或特定WebView内核下。
  2. Chrome浏览器 严格执行最新的安全策略,要求跨站请求的Cookie必须设置 SameSite=None; Secure=true 才能被携带。

解决方案:

方案一:条件性设置Cookie(推荐) 在服务器端根据请求头判断环境,动态设置Cookie属性:

// 伪代码示例
const isWebView = req.headers['user-agent'].includes('uni-app');
const cookieOptions = {
  httpOnly: true,
  secure: true,
  sameSite: isWebView ? 'Lax' : 'None' // WebView环境使用Lax
};
res.cookie('token', 'value', cookieOptions);
回到顶部