cookies、sessionStorage、localStorage知识强化
很全面的博文-友情链接
根据博文自己整理的,补充完善的知识
html4
- 用来跟踪浏览器用户身份的会话方式
- cookie保存在浏览器端
- session保存在服务器端
会话方式 |
机制 |
存储位置 |
特征 |
备注 |
Cookie |
会话Cookie |
保存在内存 |
未设置过期时间 |
生命期随浏览器关闭而结束 |
|
非会话Cookie |
保存在硬盘 |
设置过期时间 |
不随浏览器关闭结束,直到过期时间结束 |
会话方式 |
客户端 |
请求 |
处理 |
重写URL |
Session |
允许Cookie |
有SessionId |
服务端返回对应Session对象 |
否 |
|
无SessionId |
服务器创建Session对象,并在本次请求返回SessinId,使用Cookie方式存储 |
|
否 |
|
禁用Cookie |
url有SessionId |
服务端返回对应Session对象 |
|
|
|
url无SessionId |
服务器创建Session对象,并在本次请求返回Sessinid |
重写URL将SessionID拼接到访问地址 response.encodeURL(url) |
会话方式 |
存储位置 |
存储内容 |
存储大小 |
安全性 |
Cookie |
客户端 |
只能保存字符串 |
单个Cookie保存不能超过4kb |
隐患: Cookie欺骗,Cookie截获 |
Session |
服务器 |
类似HashTable的数据结构,支持任何类型的对象 |
没有限制 |
优于Cookie |
Session安全
SessionId存储在Cookie中,若要攻破Session首先要攻破Cookie
SessionId要有人登录,或启动Session_Start才会有,所以攻破Cookie也不一定能得到SessionId
第二次启动Session_Start后,前一次的SessionId就会失效,Session过期后,SessionId也会失效
SessionId是加密的
攻击者必须在短时间内攻破加密的SessionId,这很难。
会话方式 |
应用场景 |
会话方式 |
应用场景 |
Cookie |
|
Session |
用于保存每个用户的专用信息,变量的值保存在服务器端,通过SessionId来区分不同的客户 |
|
判断用户是否登录过网站,以便下次登录时能够实现自动登录(或者记住密码)。如果我们删除Cookie,则每次登录必须从新填写登录的相关信息。 |
|
网上商城中的购物车 |
|
保存上次登录的时间等信息 |
|
保存用户登录信息 |
|
保存上次查看的页面 |
|
将某些数据存放入Session中,供同一个用户的不同页面使用 |
|
浏览计数 |
|
防止用户非法登录 |
会话方式 |
缺点 |
会话方式 |
缺点 |
Cookie |
大小收限制 |
Session |
保存的东西越多,就越占用服务器内存,对于在线用户人数较多的网站,服务器的内存压力会比较大 |
|
用户可以操作(禁用)Cookie,使功能受限 |
|
依赖于Cookie(SessionId保存在Cookie); 如果禁用Cookie,则要使用URL重写,不安全 |
|
安全性较低 |
|
创建Session变量有很大的随意性,可随时调用,不需要开发者做精确的处理。所以多度使用Session变量将会导致代码不可读而且不好维护。 |
|
有些状态不可能保存在客户端 |
|
|
|
每次访问都要传送Cookie给服务器,浪费带宽 |
|
|
|
Cookie数据有路径(path)的概念,可以限制Cookie只属于某个路径 |
|
|