打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
AngularJS进阶(十五)Cookie ''''data'''' possibly not set or overflowed because it was too large

Cookie 'data' possibly not set or overflowed

 because it was too large (5287 > 4096 bytes)!

故事起源

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

问题分析

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

$cookieStore.get("data")

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

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

刨根问底

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

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

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

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

3.cookieStore与instance的区别?

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

注:有关instance的详情请点击此处.

附:使用步骤

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

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

Step 1 - include cookies module

第一步加载JS文件,并且依赖 cookie module

[javascript] view plain copy
print?
  1. <script src="//code.angularjs.org/1.2.9/angular.min.js"></script>  
  2. <script src="//code.angularjs.org/1.2.9/angular-cookies.min.js"></script>  

创建 angular module

[javascript] view plain copy
print?
  1. var DemoApp = angular.module( 'DemoApp', ['ngCookies'] ).config( demoConfig );  

Step 2 - Inject into controller

    将cookie module 注入到 controller 中

[javascript] view plain copy
print?
  1. DemoApp.controller('DemoController', function($cookieStore, $scope, $location, $routeParams, $http , $timeout ){ .. body here .. })  

Step 3 - Using the $cookieStore

    现在可以使用put、get 、remove方法操作 cookie , $cookieStore 可以直接存储对象到cookie中,它会使用angularjs 的 toJson/fromJson 自动序列化和反序列化

[javascript] view plain copy
print?
  1. $cookieStore.put("name","my name");  
  2. $cookieStore.get("name") == "my name";  
  3. $cookieStore.remove("name");  
  4. $cookieStore.put("persion", {  
  5.             name: "my name",  
  6.             age: 18  
  7. });  
  8. $scope.person = $cookieStore.get("persion");  

Step 4 - Using the $cookie

[javascript] view plain copy
print?
  1. DemoApp.controller('DemoController', function ($cookies, $scope) {  
  2.         $cookies.myFavorite = 'oatmeal haha';  
  3. })    


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Angular cookies cookieStore
什么是Cookie?有哪些类型?如何创建、读取和删除?
android中HttpClient获取Session然后使用 WebView共享session的解决办法(转)
OkHttp3之Cookies管理及持久化
AngularJS 1.3.0 不再支持 IE8
AngularJS开发指南28:创建服务
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服