uni-app 鸿蒙next版webview不支持session

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

uni-app 鸿蒙next版webview不支持session

操作步骤:

  • 使用webview打开jsp开发的页面

预期结果:

  • 正常登录并且获取数据

实际结果:

  • 由于没有session会话,后续接口请求数据无法正常获取数据

bug描述:

  • 使用webview加载老系统的使用jsp开发的页面,没有session,是否是鸿蒙next的webview不支持session呢?
信息类别 详细信息
产品分类 uniapp/App
PC开发环境 Windows
PC系统版本 win11
HBuilderX类型 正式
HBuilderX版本 4.36
手机系统 HarmonyOS NEXT
手机系统版本 HarmonyOS NEXT Developer Preview
手机厂商 华为
手机机型 mate60
页面类型 vue
vue版本 vue3
打包方式 离线
项目创建方式 HBuilderX

更多关于uni-app 鸿蒙next版webview不支持session的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 鸿蒙next版webview不支持session的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在处理uni-app鸿蒙next版webview不支持session的问题时,我们需要考虑如何在跨域请求或不同webview实例间保持会话状态。由于鸿蒙系统的webview可能限制了某些cookie或session的管理机制,我们可以通过编程手段来手动管理会话状态。以下是一个基于uni-app的示例,展示如何在客户端和服务器间手动传递session ID。

客户端代码(uni-app)

  1. 发送请求时携带session ID
// 假设我们有一个全局变量来存储session ID
let sessionId = '';

// 获取session ID的函数(这里假设从服务器登录接口获取)
function fetchSessionId() {
    uni.request({
        url: 'https://yourserver.com/login', // 登录接口
        method: 'POST',
        data: {
            username: 'yourUsername',
            password: 'yourPassword'
        },
        success: (res) => {
            if (res.data && res.data.sessionId) {
                sessionId = res.data.sessionId;
            }
        }
    });
}

// 发送请求时携带session ID
function sendRequestWithSession(url, data) {
    uni.request({
        url: url,
        method: 'POST',
        header: {
            'Content-Type': 'application/json',
            'Session-Id': sessionId // 在header中携带session ID
        },
        data: data,
        success: (res) => {
            console.log('Response:', res);
        },
        fail: (err) => {
            console.error('Request failed:', err);
        }
    });
}
  1. 调用示例
// 假设我们在应用启动时获取session ID
fetchSessionId();

// 在需要时发送请求
sendRequestWithSession('https://yourserver.com/some-endpoint', { key: 'value' });

服务器端代码(示例使用Node.js + Express)

  1. 验证session ID
const express = require('express');
const app = express();

app.use(express.json());

let sessions = {}; // 简单存储session的示例

app.post('/login', (req, res) => {
    const { username, password } = req.body;
    // 这里进行身份验证逻辑
    if (username === 'yourUsername' && password === 'yourPassword') {
        const sessionId = Math.random().toString(36).substr(2, 9); // 生成随机session ID
        sessions[sessionId] = { username }; // 存储session信息
        res.json({ sessionId });
    } else {
        res.status(401).json({ error: 'Invalid credentials' });
    }
});

app.post('/some-endpoint', (req, res) => {
    const sessionId = req.headers['session-id'];
    if (sessions[sessionId]) {
        res.json({ message: 'Success', user: sessions[sessionId].username });
    } else {
        res.status(403).json({ error: 'Session expired or invalid' });
    }
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

通过上述方法,我们可以在uni-app鸿蒙next版中手动管理session状态,确保在webview不支持session时依然能够维持用户会话。

回到顶部