1# 管理Cookie及数据存储 2 3 4## Cookie管理 5 6Cookie是网络访问过程中,由服务端发送给客户端的一小段数据。客户端可持有该数据,并在后续访问该服务端时,方便服务端快速对客户端身份、状态等进行识别。 7 8Web组件提供了WebCookieManager类,用于管理Web组件的Cookie信息。Cookie信息保存在应用沙箱路径下/proc/{pid}/root/data/storage/el2/base/cache/web/Cookiesd的文件中。 9 10下面以[setCookie()](../reference/apis/js-apis-webview.md#setcookie)接口举例,为“www.example.com”设置单个Cookie的值“value=test”。其他Cookie的相关功能及使用,请参考[WebCookieManager()](../reference/apis/js-apis-webview.md#webcookiemanager)接口文档。 11 12 13```ts 14// xxx.ets 15import web_webview from '@ohos.web.webview'; 16 17@Entry 18@Component 19struct WebComponent { 20 controller: web_webview.WebviewController = new web_webview.WebviewController(); 21 22 build() { 23 Column() { 24 Button('setCookie') 25 .onClick(() => { 26 try { 27 web_webview.WebCookieManager.setCookie('https://www.example.com', 'value=test'); 28 } catch (error) { 29 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 30 } 31 }) 32 Web({ src: 'www.example.com', controller: this.controller }) 33 } 34 } 35} 36``` 37 38 39## 缓存与存储管理 40 41在访问网站时,网络资源请求是相对比较耗时的。开发者可以通过Cache、Dom Storage等手段将资源保持至本地,以提升访问同一网站的速度。 42 43 44### Cache 45 46使用[cacheMode()](../reference/arkui-ts/ts-basic-components-web.md#cachemode)配置页面资源的缓存模式,Web组件为开发者提供四种缓存模式,分别为: 47 48- Default : 优先使用未过期的缓存,如果缓存不存在,则从网络获取。 49 50- None : 加载资源使用cache,如果cache中无该资源则从网络中获取。 51 52- Online : 加载资源不使用cache,全部从网络中获取。 53 54- Only :只从cache中加载资源。 55 56 57在下面的示例中,选用缓存设置为None模式。 58 59 60 61```ts 62// xxx.ets 63import web_webview from '@ohos.web.webview'; 64 65@Entry 66@Component 67struct WebComponent { 68 @State mode: CacheMode = CacheMode.None; 69 controller: web_webview.WebviewController = new web_webview.WebviewController(); 70 build() { 71 Column() { 72 Web({ src: 'www.example.com', controller: this.controller }) 73 .cacheMode(this.mode) 74 } 75 } 76} 77``` 78 79 80 同时,为了获取最新资源,开发者可以通过[removeCache()](../reference/apis/js-apis-webview.md#removecache)接口清除已经缓存的资源,示例代码如下: 81 82```ts 83// xxx.ets 84import web_webview from '@ohos.web.webview'; 85 86@Entry 87@Component 88struct WebComponent { 89 @State mode: CacheMode = CacheMode.None; 90 controller: web_webview.WebviewController = new web_webview.WebviewController(); 91 build() { 92 Column() { 93 Button('removeCache') 94 .onClick(() => { 95 try { 96 // 设置为true时同时清除rom和ram中的缓存,设置为false时只清除ram中的缓存 97 this.controller.removeCache(true); 98 } catch (error) { 99 console.error(`ErrorCode: ${error.code}, Message: ${error.message}`); 100 } 101 }) 102 Web({ src: 'www.example.com', controller: this.controller }) 103 .cacheMode(this.mode) 104 } 105 } 106} 107``` 108 109 110### Dom Storage 111 112Dom Storage包含了Session Storage和Local Storage两类。前者为临时数据,其存储与释放跟随会话生命周期;后者为可持久化数据,落盘在应用目录下。两者的数据均通过Key-Value的形式存储,通常在访问需要客户端存储的页面时使用。开发者可以通过Web组件的属性接口[domStorageAccess()](../reference/arkui-ts/ts-basic-components-web.md#domstorageaccess)进行使能配置,示例如下: 113 114 115 116```ts 117// xxx.ets 118import web_webview from '@ohos.web.webview'; 119 120@Entry 121@Component 122struct WebComponent { 123 controller: web_webview.WebviewController = new web_webview.WebviewController(); 124 build() { 125 Column() { 126 Web({ src: 'www.example.com', controller: this.controller }) 127 .domStorageAccess(true) 128 } 129 } 130} 131``` 132