uni-app targetSdkVersion cookie session 问题
uni-app targetSdkVersion cookie session 问题
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
HBuilderX | 3.99 | 云端打包 |
操作步骤:
"minSdkVersion" : 29,
"targetSdkVersion" : 33
预期结果:
后端通过 cookie 获取 session 内容
实际结果:
后端通过 cookie 获取 session 为 null
bug描述:
项目使用cookie保持状态
通过多次测试发现,targetSdkVersion 为 33 时后端获取的 cookie 为空,targetSdkVersion 为空时后端获取的 cookie 正常
1 回复
在 uni-app
开发中,targetSdkVersion
、cookie
和 session
是常见的与 Android 平台和 Web 开发相关的概念。以下是一些可能遇到的问题及其解决方案:
1. targetSdkVersion
问题
targetSdkVersion
是 Android 应用开发中的一个重要配置项,它指定了应用的目标 API 级别。较高的 targetSdkVersion
可以让应用利用最新的 Android 功能和优化,但也可能带来一些兼容性问题。
常见问题:
- 权限问题:从 Android 6.0 (API 23) 开始,应用需要在运行时请求某些敏感权限。如果
targetSdkVersion
设置为 23 或更高,需要确保在代码中处理这些权限请求。 - 行为变更:不同的
targetSdkVersion
可能会导致某些 API 的行为发生变化。例如,targetSdkVersion
28 及以上版本对后台服务的限制更加严格。
解决方案:
- 权限处理:在
manifest.json
中声明所需的权限,并在代码中动态请求权限。{ "permission": { "android.permission.CAMERA": { "description": "需要摄像头权限" } } }
- 行为变更:阅读 Android 官方文档 了解不同
targetSdkVersion
的行为变更,并相应调整代码。
2. cookie
和 session
问题
在 Web 开发中,cookie
和 session
是用于维护用户会话状态的机制。uni-app
支持跨平台开发,因此在处理 cookie
和 session
时需要注意不同平台的差异。
常见问题:
- 跨域问题:在 Web 平台,
cookie
和session
的跨域问题可能会导致会话状态丢失。 - 平台差异:在移动端(如 Android 和 iOS),
cookie
和session
的处理方式可能与 Web 不同,特别是在使用uni.request
进行网络请求时。
解决方案:
- 跨域问题:
- 确保服务器设置了正确的
CORS
头。 - 使用
withCredentials
选项来携带cookie
。uni.request({ url: 'https://example.com/api', method: 'GET', withCredentials: true, success: (res) => { console.log(res.data); } });
- 确保服务器设置了正确的
- 平台差异:
- 在移动端,
uni.request
默认会携带cookie
,但需要确保服务器支持cookie
。 - 如果需要手动管理
cookie
,可以使用uni.setStorageSync
和uni.getStorageSync
来存储和读取session
信息。
- 在移动端,
3. 综合问题
在某些情况下,targetSdkVersion
的配置可能会影响 cookie
和 session
的处理。例如,较高的 targetSdkVersion
可能会引入更严格的网络安全策略,导致 cookie
无法正常使用。
解决方案:
- 网络安全配置:在
AndroidManifest.xml
中添加网络安全配置,允许不安全的网络请求。
在<application android:networkSecurityConfig="@xml/network_security_config" ... > ... </application>
res/xml/network_security_config.xml
中配置:<network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">example.com</domain> </domain-config> </network-security-config>