cookie 和 session
cookie
- 类型:“小型文本文件”,指某些网站为了辩护用户身份而储存在用户本地终端上的数据
- cookie总是保存在客户端中的
内存cookie:由浏览器维护,保存在内存中,浏览器关闭后消失了,其存在的时间时短暂
硬盘cookie:保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的
- HTTP协议时无状态性的,即服务器不知道用户上一次做了什么
服务器可以设置或读取cookie中包含信息,借此维护用户跟服务器会话中的状态
-
cookie的内容
name:cookie的名字,一旦创建,名称不可更改
value
maxAge:cookie失效时间,单位秒
path
domain:域.可以访问该Cookie的域名。第一个字符必须为".",如果设置为".google.com",则所有以"google.com结尾的域名都可以访问该cookie",如果不设置,则为所有域名
secure:该cookie是否仅被使用安全协议传输
- 用途
1.当用户选购了第一项商品,服务器在向用户发送网页的同时,还发送了一段Cookie,记录着那项商品的信息。当用户访问另一个页面,浏览器会把Cookie发送给服务器,于是服务器知道他之前选购了什么。用户继续选购饮料,服务器就在原来那段Cookie里追加新的商品信息。结帐时,服务器读取发送来的Cookie就行了。
2.当登录一个网站时,网站往往会请求用户输入用户名和密码,并且用户可以勾选“下次自动登录”。如果勾选了,那么下次访问同一网站时,用户会发现没输入用户名和密码就已经登录了。这正是因为前一次登录时,服务器发送了包含登录凭据(用户名加密码的某种加密形式)的Cookie到用户的硬盘上。第二次登录时,如果该Cookie尚未到期,浏览器会发送该Cookie,服务器验证凭据,于是不必输入用户名和密码就让用户登录了。
- 缺陷
1.cookie会被附加在每个HTTP请求中,所以无形中增加了流量
2.由于在HTTP请求中的Cookie时明文传递的,所以安全性成问题,除非用HTTPS
3.cookie的大小限制在4KB左右,对于复杂的存储需求来说是不够用的
Session
- 服务端使用的一种记录客户端状态的机制
客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上
同一个客户端和服务端交互时,不需要每次都传回所有的cookie值,而是只要传回一个ID,这个ID时客户端第一次访问服务器生成的,而且每个客户端是唯一的。这样每个客户端就有了一个唯一的ID,客户端只要传回这个ID就可行了,这个IDNANE 为JSESIONID 的一个 Cookie。
- 缺陷
1.一般是寄生在cookie下的,当cookie禁止,session也被禁止
当然可以通过url重写来摆脱cookie
2.当用户访客量很大时,对服务器压力大
3.session是将用户信息储存在服务器上面,如果访问服务器的用户越来越多,那么服务器上面的session越多,session会对服务器造成压力,影响服务器的负载。如果session内容过于复杂,当大量客户访问服务器时还可能会导致内存溢出。
4.用户信息丢失,或者说用户访问的不是这台服务器的情况下,就会出现数据库丢失。
(8.6 自我充电)