uni-app iOS APP会请求后端不同的session

发布于 1周前 作者 yuanlaile 来自 Uni-App

uni-app iOS APP会请求后端不同的session

操作步骤:

  1. 在iOS模拟器或真机运行默认调试基座,或最新正式版iOS SDK本地打包的app
  2. 打开软件或基座向后端发送请求,使后端记录当前请求的sessionID
  3. 退出软件或基座后台
  4. 再次打开软件或基座,向后端发送请求,记录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

2 回复

已测试,同样的条件下,安卓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 实例,每个实例都有自己的 baseURLSession-Key。然后,在页面的方法中,我们使用这些实例来发起请求。这样,你就可以在 uni-app 中管理和使用多个 session 了。

请注意,实际项目中可能需要更复杂的 session 管理逻辑,比如 session 的存储、刷新和过期处理等。此外,Session-Key 只是一个示例,实际项目中可能使用其他机制(如 JWT tokens)来识别和管理会话。

回到顶部