HarmonyOS 鸿蒙Next 如何解决Web组件设置Cookie属性无法生效的问题

发布于 1周前 作者 sinazl 最后一次编辑是 5天前 来自 鸿蒙OS

【问题现象】

Web组件设置设置Cookie属性无法生效,以设置过期时间为例。如下代码示例,把expires=Fri, 13 Aug 2032 12:31:23 GMT 改成expires=Sat, 13 Aug 2016 12:34:02 GMT 未生效。

初始设置代码示例如下:

let cookieData ='OPENDUSS=dxm_4EfQZ77x-Sj789s23KUPp4dGFM,path=/,expires=Fri, 13 Aug 2032 12:31:23 GMT,domain=.dxmcash.baidu.com,httponly,secure'
webview.WebCookieManager.configCookie('https://www.dxmcash.baidu.com', cookieData)

清除设置代码示例如下:

let cookieData = 'OPENDUSS=dxm_4EfQZ77x-Sj789s23KUPp4dGFM,path=/,expires=Sat, 13 Aug 2016 12:34:02 GMT,domain=.dxmcash.baidu.com,httponly,secure'
webview.WebCookieManager.configCookie('https://www.dxmcash.baidu.com', cookieData)

【背景知识】

  • fetchCookieSync接口:Cookie设置不支持以逗号分隔注入,设置Cookie过期时间等其他属性时需要使用分号“;”分隔。

【解决方案】

CookieData内容以分号“;”进行分割,代码示例如下:

import web_webview from '@ohos.web.webview';
@Entry
@Component
struct Index {
  controller: web_webview.WebviewController = new web_webview.WebviewController();
  cookieData1 = 'OPENDUSS=dxm_4EfQZ77x-Sj789s23KUPp4dGFM;path=/;expires=Fri,13 Aug 2032 12:31:23 GMT;domain=.example.com;httponly;secure;'
  cookieData2 = 'OPENDUSS=dxm_4EfQZ77x-Sj789s23KUPp4dGFM;path=/;expires=Sat,13 Aug 2016 12:34:02 GMT;domain=.example.com;httponly;secure;'

  build() {
    Column() {
      Button('configCookieSync1')
        .onClick(() => {
          try {
            web_webview.WebCookieManager.configCookieSync('https://www.example.com',this.cookieData1 );
            console.log("cookie 操作:configCookieSync1")
          } catch (error) {
          }
        })

      Button('configCookieSync2')
        .onClick(() => {
          try {
            web_webview.WebCookieManager.configCookieSync('https://www.example.com',this.cookieData2 );
            console.log("cookie 操作:configCookieSync2")
          } catch (error) {
          }
        })

      Button('fetchCookieSync')
        .onClick(() => {
          try {
            let value = web_webview.WebCookieManager.fetchCookieSync('https://www.example.com');
            console.log("cookie 操作:fetchCookieSync cookie = " + value);
          } catch (error) {
          }
        })
      Web({ src: 'https://www.example.com', controller: this.controller })
    }
  }
}

其中关键步骤是:

(1)首先点击configCookieSync1后再通过fetchCookieSync获取cookie,日志如下则说明cookie设置成功。

10-22 19:41:17.434   48653-48653   A03D00/com.exa...bcookie/JSAPP  com.examp...ebcookie  I     cookie 操作:configCookieSync1
10-22 19:41:18.975   48653-48653   A03D00/com.exa...bcookie/JSAPP  com.examp...ebcookie  I     cookie 操作:fetchCookieSync cookie = OPENDUSS=dxm_4EfQZ77x-Sj789s23KUPp4dGFM

(2)然后点击configCookieSync2后再通过fetchCookieSync获取cookie,日志如下则说明cookie清除成功。

10-2219:42:06.394   48653-48653   A03D00/com.exa...bcookie/JSAPP  com.examp...ebcookie  I     cookie 操作:configCookieSync2
 10-22 19:42:07.559   48653-48653   A03D00/com.exa...bcookie/JSAPP  com.examp...ebcookie  I     cookie 操作:fetchCookieSync cookie =
1 回复

针对HarmonyOS 鸿蒙Next中Web组件设置Cookie属性无法生效的问题,以下是一些可能的解决方案:

  1. 检查Cookie域名设置

    • Cookie默认只能在其设置的域名及其子域名中访问。顶级域名的Cookie不会自动传递到二级域名。因此,如果需要在二级域名上使用Cookie,需要为二级域名单独设置Cookie。
  2. 确保Cookie属性正确

    • 设置Cookie时,确保使用了正确的名称和值。
    • 检查Cookie的Domain、Path、Secure和HttpOnly等属性是否设置正确。特别是Domain属性,需要确保与访问的域名匹配。
  3. 清除浏览器缓存

    • 有时浏览器缓存可能会导致请求不携带最新的Cookie。尝试清除浏览器缓存或使用无痕模式打开浏览器以获取最新的Cookie设置。
  4. 检查服务器响应

    • 服务器响应中设置的某些头信息(如Cache-Control、Expires等)可能会影响浏览器是否发送Cookie。检查服务器响应头以确保没有阻止Cookie的发送。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部