cookie和session
1. cookie和session的概念和区别?
1.1 应用场景
1.1.1 cookie
登录网站,第一天输入用户名密码登录了,第二天再打开很多情况下就直接打开了。这个时候用到的一个机制就是cookie。
1.1.2 session
session一个场景是购物车,添加了商品之后客户端处可以知道添加了哪些商品,而服务器端如何判别呢,所以也需要存储一些信息就用到了session。
1.2 cookie
[!NOTE] 服务器通过设置
set-cookie
这个响应头,将cookie信息返回给浏览器,浏览器将响应头中的cookie信息保存在本地,当下次向服务器发送HTTP请求时,浏览器会自动将保存的这些cookie信息添加到请求头中。
通过cookie,服务器就会识别出浏览器,从而保证返回的数据是这个用户的。
- 通过
set-cookie
设置 - 下次请求会自动带上
- 键值对,可设置多个
1.2.1 cookie属性
- max-age
- 过期时间有多长
- 默认在浏览器关闭时失效
- expires
- 到哪个时间点过期
- secure
- 表示这个cookie只会在https的时候才会发送
- HttpOnly
- 设置后无法通过在js中使用document.cookie访问
- 保障安全,防止攻击者盗用用户cookie
- domain
- 表示该cookie对于哪个域是有效的。 (关键点:cookie默认是不能直接跨域访问的,但是二级域名是可以共享cookie的)
- cookie的跨域
- 通过在www.taobao.com 的server端提供一个获取当前域下所有cookie的 php的请求地址,然后该php获取到cookie之后将期并成 js 代码,也就是以上第二个截 - 图所看到的。然后再在 tmall用 jsonp 的方式跨域加载该 js 代码,从而实现 cookie 的跨域访问。
1.3 session(理解原理)
- 存放在服务器的一种用来存放用户数据的类似HashTable的结构
- 浏览器第一次发送请求时,服务器自动生成了HashTable和SessionID来唯一标识这个hash表,并将sessionID存放在cookie中通过响应发送到浏览器。浏览器第二次发送请求会将前一次服务器响应中的sessionID随着cookie发送到服务器上,服务器从请求中提取sessionID,并和保存的所有sessionID进行对比,找到这个用户对应的hash表。
- 一般这个值是有时间限制的,超时后销毁,默认30min
- 当用户在应用程序的web页面间挑转时,存储在session对象中的变量不会丢失而是在整个用户会话中一直存在下去。
- session依赖于cookie,因为sessionID是存放在cookie中的。
2. sesssion与cookie的区别?(面试重点)
- cookie存在客户端,session存在于服务端。
- cookie在客户端中存放,容易伪造,不如session安全
- session会消耗大量服务器资源,cookie在每次HTTP请求中都会带上,影响网络性能
- 域的支持范围不一样,比方说a.com的Cookie在a.com下都能用,而www.a.com的Session在api.a.com下都不能用