有人窃斧者
有人窃斧者
  • 发布:2022-01-13 16:54
  • 更新:2022-02-16 18:13
  • 阅读:962

【报Bug】uni-app项目转为H5项目,session一直变化导致登录不了

分类:uni-app

产品分类: uniapp/H5

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: w11

HBuilderX类型: 正式

HBuilderX版本号: 3.3.5

浏览器平台: Chrome

浏览器版本: 83.0.4103.97(正式版本) (32 位)

项目创建方式: HBuilderX

示例代码:

下面是封装的部分请求

const Request = (url, method = 'GET', params, contentType = 1) => {    
    let token = uni.getStorageSync('token')    
    let cookie = uni.getStorageSync('cookie')    
    // console.log(state)    
    let header = {    
        'Content-Type': contentType === 1 ? 'application/json' : 'application/x-www-form-urlencoded',    
        'Set-Cookie': token,    
        // 'Cookie': token    
    }    
    if (method == 'GET') {    
        url = url + formatGetUri(params)    
    }    
    // console.log(url)    
    return new Promise((resolve, reject) => {    
        uni.request({    
            url:baseUrl + url,    
            data: method == 'GET' ? {} : params,    
            method: method,    
            header: header,    
            timeout: 1000000,    
            success: (res) => {    
                 // console.log(res)    
                 store.dispatch('setErrState',true)    
                store.dispatch('setBtnLoading',false)    
                if (res.statusCode==200) {    
                    if(res.data.success){    
                        resolve(res.data.data)    
                    }else{    
                        if(res.data.errorMessage||res.data.message){    
                            uni.showToast({    
                                icon: 'none',    
                                title: res.data.errorMessage||res.data.message    
                            });    
                        }    
                        resolve(res.data)    
                        store.dispatch('setErrState',false)    
                        store.dispatch('log', {    
                            url: url,    
                            time: new Date(),    
                            res    
                        })    
                    }    

                } else {    
                    store.dispatch('log', {    
                        url: url,    
                        time: new Date(),    
                        res    
                    })    
                    if(res.data.resultCode=='A00003'){    
                        uni.setStorageSync('token','')    
                        utils.router('login',null,3)    
                    }else{    
                        uni.showToast({    
                            icon: 'none',    
                            title: '服务异常,请稍后再试'    
                        });    
                    }    
                }    
            },    
            fail: (err) => {    
                console.log('request fail', err)    
                store.dispatch('setBtnLoading',false)    
                reject(err)    
                uni.showToast({    
                    icon: 'none',    
                    title: '服务连接异常,请稍后再试'    
                });    
            }    
        })    
    })    
}  

操作步骤:

页面点击刷新验证码方法接口

getCode: function () {  
      // 验证码地址  
            //this.codeImg=this.$utils.getWebBaseUrl()+'/web-api/randomPicture.action?d=' + +new Date()  
             this.codeImg='http://localhost:8080/baseApi/web-api/randomPicture.action?d=' + +new Date()  
              console.log(this.codeImg)  
        },

预期结果:

每次刷新验证码,session保持不变

实际结果:

每次刷新验证码,session一直变化

bug描述:

uni-app项目转为H5项目时,内置浏览器调式,调用登录接口,response-header的session与获取验证码接口时获取的session不一致,导致虽然输入正确的验证码,登录接口仍会报验证错误,且点击验证码刷新时,每次接口的session都会变化,鉴权失败!

2022-01-13 16:54 负责人:无 分享
已邀请:
小枫叶

小枫叶 - 外包接单加v:wlmk1234567 注明来意

首先,登录之前的话,是不是代表session是不存在的,那么,你请求验证码接口是不需要带session的. 当登录成功的时候才需要保存session

DCloud_Android_DQQ

DCloud_Android_DQQ

你的意思是在 chrome环境下 session一直变化?

  • 有人窃斧者 (作者)

    在内置浏览器和chrome环境下,没调用一次登录接口,session就会变化一次

    2022-02-15 17:49

DCloud_Android_DQQ

DCloud_Android_DQQ

看你在好几个地方发了帖子。我简单帮你梳理一下。为什么发了这么多帖子没人回复你。

首先

登录接口,response-header的session与获取验证码接口时获取的session不一致

session 本身是服务器端管理的会话标识。
实现方式有很多包括tomcat提供实现,servlet提供实现,或者基于cookie来实现,甚至你们自己的业务服务器都能自己实现一套。

session错乱,本身就是个你业务上的,服务端上的现象。
这个问题跟前端是没有直接关系。跟uni的框架是没有直接关系。

导致这个问题的可能非常多。
你不把问题阐述清楚。别人也很难,也没有耐心 帮你解决你的业务问题。

第二。

看你发的代码里面,唯一可能与之相关的是

  let token = uni.getStorageSync('token')      
  let cookie = uni.getStorageSync('cookie')  

除非你提出的问题是,明确阐述我们提供的api 有什么不符合文档描述的地方。
我们才能帮你处理

  • 有人窃斧者 (作者)

    项目发布为H5时出现的这个问题,运行到手机或模拟器时调试没有session一直变化的问题,是不是项目发布为H5时有什么限制之类的

    2022-02-16 09:25

小枫叶

小枫叶 - 外包接单加v:wlmk1234567 注明来意

我感觉吧,你可能是对这个东西有什么误解,因为,还是那句话,一般来讲在没登录之前,是不需要存储什么session的,你只是在登录之前,当然你在登录之后,token过期了,那也情有可原,但是你既然有token了,那么在你请求的时候,吧token带给后端,让他去处理就好了,还有,为什么你获取验证码的接口都需要带着token呢,这本身逻辑不通.还有就是你在刷新验证码的时候,不需要动别的地方,只需要请求一个图片就好了
也可能我实现的方式跟你不一样,仅作为参考

该问题目前已经被锁定, 无法添加新回复