uni-app iOS APP会请求后端不同的session
uni-app iOS APP会请求后端不同的session
操作步骤:
- 在iOS模拟器或真机运行默认调试基座,或最新正式版iOS SDK本地打包的app
- 打开软件或基座向后端发送请求,使后端记录当前请求的sessionID
- 退出软件或基座后台
- 再次打开软件或基座,向后端发送请求,记录sessionID
预期结果:
两次请求的sessionID一致
实际结果:
两次请求的sessionID不一致
bug描述:
iOS APP,不管是模拟器还是真机,不管是默认调试基座还是本地SDK打包,每次关闭app后台后,再次打开APP都会向后端请求不同的Session,导致无法鉴权
项目 | 信息 |
---|---|
产品分类 | uniapp/App |
PC开发环境操作系统 | Mac |
PC开发环境操作系统版本号 | MacOS 15 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 4.45 |
手机系统 | iOS |
手机系统版本号 | iOS 18 |
手机厂商 | 苹果 |
手机机型 | iPhone 15 |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 离线 |
项目创建方式 | HBuilderX |
已测试,同样的条件下,安卓APP请求的都是同一个后端Session
在处理 uni-app
开发的 iOS 应用时,如果需要请求后端不同的 session,可以通过配置和管理不同的请求实例来实现。以下是一个简化的代码示例,展示如何在 uni-app
中管理和使用多个 session。
首先,确保你已经安装了 axios
或其他 HTTP 请求库。如果没有,可以通过 npm 安装:
npm install axios
接下来,在你的 uni-app
项目中,可以创建一个 http.js
文件来管理 HTTP 请求。以下是一个示例代码,展示如何设置和管理多个 session:
// http.js
import axios from 'axios';
// 创建axios实例
const createAxiosInstance = (baseURL, sessionKey) => {
return axios.create({
baseURL,
headers: {
'Content-Type': 'application/json',
'Session-Key': sessionKey // 假设后端通过Session-Key识别session
}
});
};
// 定义不同的session实例
const session1 = createAxiosInstance('https://api.example.com/v1', 'sessionKey1');
const session2 = createAxiosInstance('https://api.example.com/v2', 'sessionKey2');
export { session1, session2 };
然后,在你的页面或组件中,可以按需使用这些实例发起请求:
// pages/index/index.vue
<template>
<view>
<!-- 页面内容 -->
</view>
</template>
<script>
import { session1, session2 } from '@/utils/http.js'; // 假设http.js放在utils目录下
export default {
methods: {
async fetchDataFromSession1() {
try {
const response = await session1.get('/some-endpoint');
console.log('Data from session1:', response.data);
} catch (error) {
console.error('Error fetching from session1:', error);
}
},
async fetchDataFromSession2() {
try {
const response = await session2.get('/another-endpoint');
console.log('Data from session2:', response.data);
} catch (error) {
console.error('Error fetching from session2:', error);
}
}
}
};
</script>
在上述代码中,我们创建了两个 axios
实例,每个实例都有自己的 baseURL
和 Session-Key
。然后,在页面的方法中,我们使用这些实例来发起请求。这样,你就可以在 uni-app
中管理和使用多个 session 了。
请注意,实际项目中可能需要更复杂的 session 管理逻辑,比如 session 的存储、刷新和过期处理等。此外,Session-Key
只是一个示例,实际项目中可能使用其他机制(如 JWT tokens)来识别和管理会话。