uni-app中uni.request每次请求在服务器都生成一个新session,用浏览器查看也是每次请求不同的sessionid

uni-app中uni.request每次请求在服务器都生成一个新session,用浏览器查看也是每次请求不同的sessionid

示例代码:

var that=this;  
uni.request({  
    url:that.app.www+'/vercode?name=register&r='+Math.random(),  
    data:{  

    },  
    success:function(res){  

    }  
})  

操作步骤:

var that=this;  
uni.request({  
//这里的请求地址为php后端语言搭建,更换一下即可  
    url:that.app.www+'/vercode?name=register&r='+Math.random(),  
    data:{  

    },  
    success:function(res){  

    }  
})  

预期结果:

  • 应该是每次请求都是同一个PHPSESSIONID
  • set-cookie: PHPSESSID=s48js4jd2ulsvvlg790mbbgaiq; expires=Sun, 07-Mar-2021 06:55:47 GMT; Max-Age=1800; path=/

实际结果:

  • 出现每次请求都是不同的PHPSESSIONID
  • set-cookie: PHPSESSID=nijvnqs48ine58stlooe4431am; expires=Sun, 07-Mar-2021 06:55:45 GMT; Max-Age=1800; path=/
  • set-cookie: PHPSESSID=s48js4jd2ulsvvlg790mbbgaiq; expires=Sun, 07-Mar-2021 06:55:47 GMT; Max-Age=1800; path=/
  • set-cookie: PHPSESSID=lbh8i9ten1be5krji6gjepqpl4; expires=Sun, 07-Mar-2021 06:58:00 GMT; Max-Age=1800; path=/

bug描述:

一开始没有注意,后面要使用验证码,发现每次验证码填写正确了,后端对不上,打印了提交的参数内容也正确。 然后就检查其他的http请求对不对,发现所有的请求都生成一个新的session。 然后发现相关帖子说是修复了 (升级新版本后uni.request头中的cookie每次请求都不一致,导致session鉴权机制失效,并且服务端会产生大量session),后面我更新了版本,发现3.1.4依旧存在这个问题。


更多关于uni-app中uni.request每次请求在服务器都生成一个新session,用浏览器查看也是每次请求不同的sessionid的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

问题已解决。 测试手机端的时候,需要在内置手机浏览器测试,不然每次请求都不同的session

更多关于uni-app中uni.request每次请求在服务器都生成一个新session,用浏览器查看也是每次请求不同的sessionid的实战教程也可以访问 https://www.itying.com/category-93-b0.html


我用谷歌 h5测试的 也不行

刚刚用内置浏览器 发现可以通过测试

内置浏览器是那个 求解

这个问题是由于uni-app在跨平台实现时,不同端的cookie处理机制差异导致的。

在H5端,uni.request会自动携带cookie,与浏览器行为一致。但在App端,默认不会自动保存和发送cookie,导致每次请求服务器都会创建新的session。

解决方案:

  1. 手动管理cookie
// 存储cookie
uni.setStorageSync('cookie', res.header['Set-Cookie'])

// 发送请求时携带
uni.request({
    url: 'your_url',
    header: {
        'Cookie': uni.getStorageSync('cookie')
    }
})
  1. 启用跨域cookie(仅H5): 在manifest.json中配置:
{
    "h5": {
        "devServer": {
            "proxy": {
                "/api": {
                    "target": "your_target",
                    "changeOrigin": true,
                    "secure": false
                }
            }
        }
    }
}
回到顶部