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
<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
现在可以使用put、get 、remove方法操作 cookie , $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 $cookie
DemoApp.controller('DemoController', function ($cookies, $scope) {
$cookies.myFavorite = 'oatmeal haha';
})
AngularJS进阶(十五)Cookie 'data' possibly not set or overflowed because it was too large的更多相关文章
- J2EE进阶(十五)MyEclipse反向工程实现从数据库反向生成实体类之Hibernate方式
J2EE进阶(十五)MyEclipse反向工程实现从数据库反向生成实体类之Hibernate方式 反向工程又称逆向工程. 开发项目涉及到的表太多,一个一个的写JAVA实体类很是费事.MyEcl ...
- Python进阶(十五)----面向对象之~继承(单继承,多继承MRO算法)
Python进阶(十五)----面向对象之~继承 一丶面向对象的三大特性:封装,继承,多态 二丶什么是继承 # 什么是继承 # b 继承 a ,b是a的子类 派生类 , a是b的超类 基类 父类 # ...
- AngularJS学习之旅—AngularJS 模块(十五)
一.AngularJS 模块 模块定义了一个应用程序. 模块是应用程序中不同部分的容器. 模块是应用控制器的容器. 控制器通常属于一个模块. 1.创建模块 通过 AngularJS 的 angular ...
- AngularJS进阶(十二)AngularJS常用知识汇总(不断更新中....)
AngularJS常用知识汇总(不断更新中....) 注:请点击此处进行充电! app.controller('editCtrl',['$http','$location','$rootScope', ...
- AngularJS进阶(十九)在AngularJS应用中集成百度地图实现定位功能
在AngularJS应用中集成百度地图实现定位功能 注:请点击此处进行充电! 前言 根据项目需求,需要实现手机定位功能,考虑到百度业务的强大能力,遂决定使用百度地图第三方服务. 添加第三方模块的步骤与 ...
- AngularJS进阶(十八)在AngularJS应用中集成科大讯飞语音输入功能
在AngularJS应用中集成科大讯飞语音输入功能 注:请点击此处进行充电! 前言 根据项目需求,需要在首页搜索框中添加语音输入功能,考虑到科大讯飞语音业务的强大能力,遂决定使用科大讯飞语音输入第三方 ...
- AngularJS进阶(十六)脏值检查
脏值检查 注:请点击此处进行充电! 需求 在项目开发过程中,需要对药店信息进行更改.如下图所示.现在的需求是:当药店信息没有发生变化时,点击"更新信息"按钮,提示"药店信 ...
- AngularJS进阶(十四)AngularJS灵异代码事件
AngularJS灵异代码事件 注:请点击此处进行充电! 事情原委 router_sys.js源代码如下: 自己在html路由跳转的代码如下: 但是在实际路由过程中,却路由到了下面的状态,相应的页面中 ...
- AngularJS进阶(十)AngularJS改变元素显示状态
AngularJS改变元素显示状态 前言 本文描述使用AngularJS提供的ng-show和ng-hide指令实现自动监听某布尔型变量来改变元素显示状态. 控制html元素显示和隐藏有n种方法:ht ...
随机推荐
- android MultiDex multiDex原理(一)
android MultiDex 原理(一) Android分包MultiDex原理详解 转载请注明:http://blog.csdn.net/djy1992/article/details/5116 ...
- iOS遍历数组的同时删除元素
我们在遍历可变数组时,最好不要做删除数组中元素的操作. 因为删除操作可能会引起数组容量的变化,导致数组越界等问题. 以前在使用for循环遍历的时候遇到过这个问题. 当时的做法是使用enumerateO ...
- AndroidStudio中导入SlidingMenu报错解决方案
----------------------------------------------------------------------------------------------[版权申明: ...
- springMVC源码分析--ControllerClassNameHandlerMapping(九)
在上一篇博客springMVC源码分析--AbstractControllerUrlHandlerMapping(六)中我们介绍到AbstractControllerUrlHandlerMapping ...
- Spark技术内幕:Storage 模块整体架构
Storage模块负责了Spark计算过程中所有的存储,包括基于Disk的和基于Memory的.用户在实际编程中,面对的是RDD,可以将RDD的数据通过调用org.apache.spark.rdd.R ...
- 供应商导入的API补充(详解EBS接口开发之供应商导入)
--供应商 --创建 AP_VENDOR_PUB_PKG.Create_Vendor ( p_api_version IN NUMBER, p_init_msg_list IN VARCHAR2 := ...
- FORM界面批量处理-全选框实现
全选框实现方法多种多样,这里只介绍两种 方法一:触发器式,优点程序简单,缺点颜色单调不突出 1. 在数据块和控制块上分别创建check box 2. 设置check box选中与为 ...
- Java继承时的初始化顺序
Java程序在启动和运行时,需要首先完成初始化的工作.在涉及到继承.static成员变量等因素时,初始化的顺序就复杂起来.下面以一个例子说明继承时的Java初始化顺序. 例子: class Insec ...
- Linux之dmesg命令
功能说明:显示内核缓冲区系统控制信息的工具 ,比如系统在启动时的信息会写到/var/log/中.语 法:dmesg [-cn][-s <缓冲区大小>] 补充说明:kernel会将开机信息存 ...
- SQL语句容易出现错误的地方-连载
1.语言问题 修改语言注册表\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432\ORACLE\KEY_DevSuitHome1中的NLS_LANG修改为AMERICAN_AMER ...