设置cookie
- 核心: ==cookie是随着响应头返回给浏览器的==
- 设置cookie的核心思想: 使用 res.setHeader 或者 writeHead 将cookie信息设置在响应头中
- cookie设置格式:key=value;expires=time
- key: cookie的名称
- value: 名称对应的值
- expires: 有效期
1) 使用 setHeader 来设置cookie
2) 一次性设置多个cookie ---> 使用数组形式、
3) 使用 writeHeader 设置cookie
读取cookie
一旦网站在浏览器设置好cookie之后,浏览器再访问网站时,cookie信息就会随着==请求头==一起发送给服务器
req.url: 保存了请求url地址
req.method: 保存了请求方式
req.headers: 保存了请求头信息
在headers中有cookie信息
当cookie设置好之后,浏览器访问任何一个路由时,都能将cookie信息发送给服务器,所以,任何一个路由都能使用 req.headers.cookie 获取cookie信息
## cookie有效期
- 设置了expires则有效期到expires指定的时间
- 未设置expires则关闭浏览器cookie即消失
常见的时间格式: GMT( Greenwich Mean Time 格林尼治标准时间) 和 UTC
时间格式装换:toUTCString()
4. 浏览器中查看cookie的三种方式
1 在Network中的请求报文以及响应报文中可以查看到
2 在application( 应用)中可以查看到cookie
3 通过js:document.cookie
5. 浏览器写入cookie
document.cookie = 'isLogin=1'
6. session技术
session介绍
- 因为cookie是保存在==客户端==的数据,不够安全,所以出现了session。
- ==服务器==为了保存用户状态而创建的一个==特殊的对象==
- session会将数据保存到服务器端(保存在文件、内存服务器 数据表中),安全性就可以得到保证。
express设置session时,需要使用第三方模块 --- express-session shell
npm i express-session
使用步骤:
1) 加载 express-session 模块
2) 将session注册为中间件
3) 使用req.session对象设置/读取session
注意事项: session 需要一个一个设置,不能直接设置 req.session = {}
## session有效期
- 当浏览器关闭后,session消失
- express-session会将session保存在内存中,每次重启服务器时即使没有关闭浏览器session也会消失
## 删除session
核心: req.session.destroy() 销毁所有session
## session 的有效范围
在一个网站中设置了session,则整个网站都能找到这个session
7. token与session的区别?
1) token和session其实都是为了身份验证,session一般翻译为会话,而token更多的时候是翻译为令牌;
2) session在服务器端会保存一份,可能保存到缓存、文件或数据库;
3) session和token都是有过期时间,都需要去管理过期时间;
4) token的思想是算法验证,session的思想是信息存储对比。
token是有多种方案的,可以设计成无需存储,token同时也是跨域的,session是要存储的,存储在数据库的思想;
5)其实token与session的问题是一种时间与空间的博弈问题
==session是空间换时间,而token是时间换空间==。两者的选择要看具体情况而定;
6)虽然确实都是“客户端记录,每次访问携带”,但 token 很容易设计为自包含的,
|