cookie:浏览器在客户端电脑硬盘中开辟的一块空间,主要用来存储服务端数据(比如sessionId)。
cookie中的数据是以域名的形式进行区分的。
cookie中的数据是有过期时间的超过时间会被浏览器自动删除。
cookie中的数据可以随着请求被发送到服务器端。
客户端第一次向服务器端发送请求时是没有cookie的,请求后服务器端会在cookie中存入一些数据。下次在访问相同的服务器就会带上cookie中的数据。
session:实际上是一个对象,存储在服务器端的内存中,在session对象中也可以存储多条数据,每一条数据都有一个sessionid作为唯一标识。
建议:重要数据存session(相对安全),不重要数据存cookie(全存session影响服务器性能)。
利用cookie和session登录的原理:
客户输入账号密码进行登录,服务器端进行验证,验证成功则生成sessionId,并且在session对象中存储当前用户信息。服务器端将sessionId写入客户端cookie中,当客户端下次访问服务器端时cookie会被自动发送给服务器端,服务器端在cookie中拿到sessionId然后在服务器端的session对象中查找sessionId进行验证,验证成功说明用户是登陆状态,则可以为其响应只有在登陆状态才能响应的数据。
在node.js中使用session功能需要借助第三方模块:express-session ,这是由express官方提供的一个中间件函数。所以用app.use()拦截所有请求并使用session函数进行处理。方法内部做了哪些事情呢?他会为请求对象下面添加一个属性session ,session属性的值是一个对象,可以在用户登录成功后保存用户信息,方法内部会在我们向session对象存储数据时生成sessionId(当前存储数据的唯一标识),然后将sessionId存储在客户端的cookie中,然后当客户端再次访问服务器端时方法会从客户端发送过来的cookie中拿到sessionId,根据sessionId从服务器端的session对象中找到对应客户信息进行验证,实现登录功能。
const session = require(‘express-session’)
app.use(session({secret:‘secret key’}))//secret的值是可以随便写的,作用是对要存储的cookie信息进行加密,当客户端再次访问服务器端时服务器端可以对拿到的cookie进行解密。这样做的好处是客户端虽然可以查看cookie的信息,但是看到的是一堆加密的字符串,这样可以提高数据的安全性。
将session持久化存储:
①将session存储到mongodb数据库当中:
②将session数据同步到redis中:还需下载redis数据库,见:
https://blog.csdn.net/qq_41812254/article/details/96576794