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