HarmonyOS next系统请求后端交易,如何保存cookie

next系统app请求后端交易,如何保存cookie,进行会话保持。

HarmonyOS
2024-09-10 12:43:12
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu

请尝试根据业务逻辑修改以下代码实现。

ohos.net.http:

private header: Header = new Header(); 
 
class Header { 
  public contentType: string = 'application/json'; 
  public cookie: string = '' 
} 
 
request() { 
  let httpRequest = http.createHttp(); 
 
  httpRequest.request( 
    // 填写HTTP请求的URL地址,可以带参数也可以不带参数。URL地址需要开发者自定义。请求的参数可以在extraData中指定 
    this.url, 
    { 
      method: http.RequestMethod.GET, // 可选,默认为http.RequestMethod.GET 
      // 开发者根据自身业务需要添加header字段 
      header: this.header, 
    }, (err: BusinessError, data: http.HttpResponse) => { 
    if (!err) { 
      // 从返回中拿到存放在cookies中的set-cookie值,并将JSESSIONID设置到请求头中,下次请求即可带上sessionId 
      console.info('cookies:' + JSON.stringify(data.cookies)); // 8+ 
      if (data.cookies) { 
        let temp:string = data.header['set-cookie'][0] 
        let cookies = temp.split(';') 
        cookies.forEach(item => { 
          if (item.indexOf("JSESSIONID") > -1) { 
            this.header.cookie = item 
          } 
        }) 
      } 
      // 当该请求使用完毕时,调用destroy方法主动销毁 
      httpRequest.destroy(); 
    } else { 
      console.error('error:' + JSON.stringify(err)); 
      // 在请求有问题时清空cookie 
      this.header.cookie = '' 
      // 取消订阅HTTP响应头事件 
      httpRequest.off('headersReceive'); 
      // 当该请求使用完毕时,调用destroy方法主动销毁 
      httpRequest.destroy(); 
    } 
  } 
  ); 
}

RCP:

private sessionConfig: rcp.SessionConfiguration = { 
  cookies: {}, 
}; 
 
rcpSession() { 
  let session = rcp.createSession(this.sessionConfig); 
  session.get(this.url).then((response) => { 
    // 。。。 做完请求校验 
 
    console.log(JSON.stringify(response)); 
    this.sessionConfig.headers = response.headers 
    if (response.cookies && response.cookies?.length > 0) { 
      let cookies: rcp.RequestCookies = this.disassemble(response.cookies[0]) 
      this.sessionConfig.cookies = cookies; 
    } 
    console.info('header:' + JSON.stringify(this.sessionConfig)); 
  }).catch((err: BusinessError) => { 
    this.sessionConfig.cookies = {} 
    console.error("err:" + JSON.stringify(err)); 
  }); 
} 
 
disassemble(cookie: rcp.ResponseCookie) { 
  let coo: Record<string, string> = {} 
  if (cookie.value) { 
    coo[cookie.name] = cookie.value 
  } 
  return coo 
}

代码只是示范了处理方式,可根据具体业务逻辑选择处理。如果只是简单的保持会话,只同时JSESSIONID就是可以实现的。

分享
微博
QQ
微信
回复
2024-09-10 15:49:32
相关问题
如何查看cookie保存位置
720浏览 • 1回复 待解决
求大佬告知如何保存cookie
2385浏览 • 2回复 待解决
http 请求 如何cookie持久化?
1987浏览 • 1回复 待解决
cookieStore.persist()依然无法保存cookie
5908浏览 • 1回复 待解决
鸿蒙http请求如何使用cookie管理器
885浏览 • 1回复 待解决
Web组件的Cookie信息保存在哪里?
425浏览 • 1回复 待解决
HarmonyOS sdk如何清除cookie
142浏览 • 1回复 待解决
NEXT网络请求如何上传大文件 ?
2023浏览 • 1回复 待解决
HarmonyOS cookie管理
164浏览 • 1回复 待解决
HarmonyOS保存图片到系统相册问题咨询
595浏览 • 1回复 待解决
HarmonyOS 如何同步cookie到webview?
446浏览 • 1回复 待解决
JS 如何实现登录 连接后端
3599浏览 • 1回复 待解决
http接口如何设置cookie
1911浏览 • 1回复 待解决