web存储
1)userdata
仅适用于IE,每个页面只能存储64kb,该域名网站最多存储640kb;
userdata重点使用语法:
2)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仍然有效。
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
1浏览器安全较高或者浏览器屏蔽了COOKIE
2COOKIE有效期已经过了
3在写程序的时候出现失误,没有写上,或者在写程序的时候出现认为漏洞,前面刚写上后面在从新读取之前又有别的代码把COOKIE清除了
写入语法:
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的用法(应用缓存)
浙公网安备 33010602011771号