session是一种会话机制。当客户端发送登录请求时,服务端会生成一个sessionId存储在cookie中返回给客户端,客户端通过响应数据中的set-cookie字段来获取cookie并保存。如果客户端再向同一网站发送请求时,会自动携带cookie,相当于一个凭证,这样做就避免了用户重复登录。而在服务端,也会使用数据库或文件来储存关于用户信息的一个大字典(也称之为用户session),这个字典的key就是sessionId,value就是用户信息。
Name : Cookie的名称,一旦创建,不可更改
Value : Cookie的值如果值为Unicode字符,则需要为字符编码。如果值为二进制数据,则需要使用BASE64编码
Domain : 指定可以访问该Cookie的域名
Path : Cookie的使用路径,如果设置为/则本域名下所有页面都可以访问该Cookie
Max-Age : Cookie的失效时间,单位为秒,常和Expires一起使用,如果为负数则关闭浏览器时Cookie失效,且浏览器不会保存该Cookie,为正数时,代表多少秒后Cookie失效
Size : Cookie的大小
Http : Cookie的Httponly属性,若此属性为True,则只有在HttpHeaders中才会带有此Cookie的信息,而不能通过document.cookie来访问此Cookie
Secure : 是否允许使用ssl/tls/https等安全协议来传输此cookie
下图是查看浏览器上的一些cookie,可以看出cookie按有效期来分分为两种,一种是会话cookie,浏览器关闭时,cookie就会消失。另一种是有具体时间的保存时间比较长的,即使浏览器关闭了,cookie在有效期内依然有效。
ps:在讨论session机制的时候,常会听到一种误解,只要关闭浏览器,session就消失了。服务器端的用户session永远也不会消失,除非删除了数据。之所以出现这种情况是因为关闭浏览器时,会话cookie会消失,所以再次访问服务器无法提供用于查询用户session的key,也就是sessionId,所以需要重新登陆。