web存储

1)userdata

仅适用于IE,每个页面只能存储64kb,该域名网站最多存储640kb;

userdata重点使用语法:

UserData.o = document.createElement('input');
UserData.o.type = "hidden";
UserData.o.style.behavior = "url('#default#userData')" ;
//上面三条是创建节点;
UserData.o.load(name);//读取指定文件name
UserData.o.setAttribute("key", val);//将数据存储到这个节点;
UserData.o.save(name);//存储这个文件名,方便查找

2)cookie

Cookie实际上是一小段的文本信息(key-value格式)。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。
特点:在会话结束时到期,也可以设置时间戳控制到期时长;如果要传到后台读取,key/value需要url编码,通过请求头储存并http请求到后端(浏览器自发的);大小4kb,不同浏览器个数也有限制;
 
cookie与session的区别
  Session是基于Cookie来工作的,同一个客户端每次访问服务器时,只要当浏览器在第一次访问服务器时,服务器设置一个id并保存一些信息(例如登陆就保存用户信息,视具体情况),并把这个id通过Cookie存到客户端,客户端每次和服务器交互时只传这个id,就可以实现维持浏览器和服务器的状态,而这个ID通常是NAME为JSESSIONID的一个Cookie。
  • 存储的位置:cookie是用来存储客户端浏览器数据的;session是用来存储服务器数据的。
  • 存储的大小:cookie大小4kb,一个站点最多保存20个cookie;session并没有上限,但出于服务器端的性能考虑,session内不要存放过多东西,设置session删除机制。
  • 隐私策略:cookie对客户端可见,既不安全;session不存在信息泄露的危险。
  • 有效期:可以通过设置cookie的属性,达到使cookie长期有效的效果;session的声明周期是从创建到超时过期。
  • 跨域支持:前者支持;后者不支持。
  • 服务器压力:前者不占用服务器内存;后者消耗大量内存。

实际上,有四种方式让Session正常工作:

  • 通过URL传递SessionID
  • 通过Cookie传递SessionID
  • 通过SSL传递SessionID
  • 通过隐藏表单传递SessionID

第一种情况:

当浏览器不支持Cookie功能时,浏览器会将用户的SessionCookieName(默认为JSESSIONID)重写到用户请求的URL参数中。格式:/path/Servlet;name=value;name2=value2?Name3=value3

第三种情况:

会根据javax.servlet.request.ssl_session属性值设置SessionID。

注:如果客户端支持Cookie,又通过URL重写,Tomcat仍然会解析Cookie中的SessionID并覆盖URL中的SessionID

cookie属性项

属性项属性项介绍
NAME=VALUE 键值对,可以设置要保存的 Key/Value,注意这里的 NAME 不能和其他属性项的名字一样
Expires 过期时间,在设置的某个时间点后该 Cookie 就会失效
Domain 生成该 Cookie 的域名,如 domain="www.baidu.com"
Path 该 Cookie 是在当前的哪个路径下生成的,如 path=/wp-admin/
Secure 如果设置了这个属性,那么只会在 SSH 连接时才会回传该 Cookie


Expires

该属性用来设置Cookie的有效期。Cookie中的maxAge用来表示该属性,单位为秒。Cookie中通过getMaxAge()和setMaxAge(int maxAge)来读写该属性。maxAge有3种值,分别为正数,负数和0。

如果maxAge属性为正数,则表示该Cookie会在maxAge秒之后自动失效。浏览器会将maxAge为正数的Cookie持久化,即写到对应的Cookie文件中(每个浏览器存储的位置不一致)。无论客户关闭了浏览器还是电脑,只要还在maxAge秒之前,登录网站时该Cookie仍然有效。

当maxAge属性为负数,则表示该Cookie只是一个临时Cookie,不会被持久化,仅在本浏览器窗口或者本窗口打开的子窗口中有效,关闭浏览器后该Cookie立即失效。
当maxAge为0时,表示立即删除Cookie
        Cookie cookie = new Cookie("mcrwayfun",System.currentTimeMillis()+"");
        // MaxAge为负数,是一个临时Cookie,不会持久化
        cookie.setMaxAge(-1);
        resp.addCookie(cookie);

 

我们来看看Domain有什么用:

现在,我们假设这里有两个域名:

域名A:a.b.f.com.cn 域名B:c.d.f.com.cn

显然,域名A和域名B都是 f.com.cn的子域名

  • 如果我们在域名A中的Cookie的domain设置为f.com.cn,那么f.com.cn及其子域名都可以获取这个Cookie,即域名A和域名B都可以获取这个Cookie
  • 如果域名A和域名B同时设置Cookie的doamin为f.com.cn,那么将出现覆盖的现象
  • 如果域名A没有显式设置Cookie的domain方法,那么domain就为a.b.f.com.cn,不一样的是,这时,域名A的子域名将无法获取这个Cookie

 

原文链接:https://www.jianshu.com/p/6fc9cea6daa2
 
丢失原因
其实造成COOKIE丢失有很多原因
1浏览器安全较高或者浏览器屏蔽了COOKIE
2COOKIE有效期已经过了
3在写程序的时候出现失误,没有写上,或者在写程序的时候出现认为漏洞,前面刚写上后面在从新读取之前又有别的代码把COOKIE清除了
3)localStorage
特点:存储的值是字符串格式,5mb,能永久存储。

写入语法:

window.localStorage["j"]=1;

window.localStorage.d=2;

window.localStorage.setItem("j",3);

读取语法:

window.localStorage["j"];

window.localStorage.d;

window.localStorage.getItem("j");

修改语法跟写入语法一样,只是修改键值;

删除语法:

window.localStorage.clear();

window.localStorage.removeItem("j");

4)sessionStorage

特点:临时保存同一窗口的数据,在关闭窗口后删除数据。seesionStorage的存储方式采用key、value的方式。value的值必须为字符串类型(传入非字符串,也会在存储时转换为字符串。true值会转换为"true")

语法:

sessionStorage.key(int index) :返回当前 sessionStorage 对象的第index序号的key名称。若没有返回null。

 sessionStorage.getItem(string key) :返回键名(key)对应的值(value)。若没有返回null。

sessionStorage.setItem(string key, string value) :该方法接受一个键名(key)和值(value)作为参数,将键值对添加到存储中;如果键名存在,则更新其对应的值。

sessionStorage.removeItem(string key) :将指定的键名(key)从 sessionStorage 对象中移除。

sessionStorage.clear() :清除 sessionStorage 对象所有的项。

5)Application cache的用法(应用缓存)

posted @ 2020-03-12 17:24  Lorasysu  阅读(149)  评论(0)    收藏  举报