写点什么

AngularJS 进阶 (十五)Cookie ‘data‘ possibly not set or overflowed because it was too large

  • 2022-12-03
    江苏
  • 本文字数:1281 字

    阅读完需:约 4 分钟

AngularJS进阶(十五)Cookie ‘data‘ possibly not set or overflowed because it was too large

项目开发过程中遇到以上问题,刚开始以为只是个警告,没太在意。后来发现直接影响到了程序的执行效果。果断寻找解决方法。


问题分析 

根据 Chrome 浏览器信息定位,显示以下代码存在错误:

$cookieStore.get("data")
复制代码


由于自己在程序使用 cookieStore 存储了大量所需数据,其数据量超过了 cookie 默认设定的存储值 4K,故会报错。


换用 instance 试试。问题成功解决,实践证明:instance 比 cookieStore 好用。


刨根问底 1.cookieStore 默认存储多少数据?可否更改默认存储数据?


经过网络查询也没能获得明确答案,不过从提示可以看出,其可存储数据空间就是 4K,而且其提供的方法只有 put、get、remove 三种,故得知更改其默认存储数据空间是不现实的事情。


从 cookieStore 获取数据后,系统自己释放存储空间,还是必须得手动释放?是不是类似于 java 的垃圾回收机制?


凭借直觉,cookieStore 应该类似于 java 的垃圾回收机制,就算没有人工编码实现释放 cookieStore 所占用的存储空间,系统也会在其生命周期结束后释放其存储空间。最佳实践是:当从 cookieStore 中取出所需数据,不再需要 cookieStore 时,应收到释放其所占用的内存空间。这样才是合理的设计。


cookieStore 与 instance 的区别?


如上述所分析,从内存占用的角度考虑,cookieStore 中存储的数据置于内存之中,实实际际的占用内存空间。而 instance 类似于指针,只是其指向的是一个对象地址,其对象是可以存储任意内容、格式、大小的数据的,不受内存所限。


使用步骤   

AngularJS 提供了很好的 cookieStore API 用来处理 cookies 。


这两个服务都能够很好的发挥 HTML5 cookies,当 HTML5 API 可用时浏览器会选择使用 HTML5 提供的 API,如果不可用则默认选择 document.cookies。无论那种方式,你都可以选择使用相同的 API 来进行工作。


Step 1 - include cookies module 第一步加载 JS 文件,并且依赖 cookie module


<script src="http://code.angularjs.org/1.2.9/angular.min.js"></script>
<script src="http://code.angularjs.org/1.2.9/angular-cookies.min.js"></script>
复制代码


创建 angular module


var DemoApp = angular.module( 'DemoApp', ['ngCookies'] ).config( demoConfig );
复制代码


Step 2 - Inject into controller    将 cookie module 注入到 controller 中

DemoApp.controller('DemoController', function($cookieStore, $scope, $location, $routeParams, $http , $timeout ){ .. body here .. })
复制代码


Step 3 - Using the 

cookieStore 可以直接存储对象到 cookie 中,它会使用 angularjs 的 toJson/fromJson 自动序列化和反序列化

$cookieStore.put("name","my name");$cookieStore.get("name") == "my name";$cookieStore.remove("name");$cookieStore.put("persion", {            name: "my name",            age: 18});$scope.person = $cookieStore.get("persion");
复制代码


Step 4 - Using the $cookies


DemoApp.controller('DemoController', function ($cookies, $scope) {        $cookies.myFavorite = 'oatmeal haha';})  
复制代码


发布于: 刚刚阅读数: 3
用户头像

No Silver Bullet 2021-07-09 加入

岂曰无衣 与子同袍

评论

发布
暂无评论
AngularJS进阶(十五)Cookie ‘data‘ possibly not set or overflowed because it was too large_Cookie_No Silver Bullet_InfoQ写作社区