nodejs——搭建电影博客(session持久会话)

这里写图片描述
总所周知,客户端和服务器端通信的协议一般采用的是无状态HTPP/HTTPS协议,这样就需要一种机制来记录客户端与服务器端之间的会话内容——(cookie+session),针对不同的客户端,对应的会话是独立的。


cookie:用于在客户端记录用户的身份;
session:用于服务器端记录用户的信息来确定的身份。
这里写图片描述

在session出现以前,服务器端和客户端都是通过cookie保存用户信息,每次http请求,客户端都会带给服务器当前域下的cookie值,浏览器收到客户端传来的cookie或者加密以后的cookie后,对其进行解析,辨识客户端;解析后的用户数据采用键值对的形式存储于客户端。
session存储于服务器端与cookie配合使用。当服务器端收到客户端http请求时,首先检查其是否有session标识(一般为sessionid),若有,则说明服务器已经为该客户端创建过session,根据session标识找到其对应的session即可;若无session标识,服务器就会为客户端创建一个session啦!并且生成一个sessionid,且这个sessionid还是唯一的,很难找到回来的字符串喔,以防被伪造!!!
看上图就知道啦,生成的seeionID在响应http请求时传递给客户端,一般放在cookie中。
一般情况下,session是被存储在服务器的内存中的,但是当我们的服务器进程被停止,内存中的session就会被清空啦!

这里写图片描述
But,通过配置session特性可以将其存储于硬盘中,这样每次服务器重启时,都可以从硬盘中读取,再次使用啦!——这就是所谓的session持久化!!!
对于session的持久化有几种常用的方式:见上图,cookie、内存、redis、mongoDB

这里写图片描述
本项目开发是基于Express框架的,在Express 3.X中,Express是建立在connect模块的开发;Express的cookieParse是Cookie解析的中间件;Express的session是用来提供会话支持的;在Express的seeion里可以配置secret,防止篡改cookie;key值是cookie的名字;maxAge设置cookie的生存周期,store即设置mongoStore示实例,用于存储会话信息。
这里写图片描述
Express中的seeion的解析是依赖于CookieParser。首先从cookie中读取加密后的connectsid,然后通过cookieParser解析成对应的sessionid;这个seeionid就被放在request的session中。由express session图中可以看出,CookieParser是必须放在seeion中间件前头的。通过session中间件的时候,首先读取store对象读取当前的session数据,所以当多个请求并发执行时,他们取得的是同一份session数据,每个请求在执行res.end()时,session就会被重新保存一次。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js中使用axios请求接口以及拦截器的使用方法如下: 首先,需要安装axios模块: ``` npm install axios ``` 然后,在代码中引入axios模块: ```js const axios = require('axios'); ``` 接下来,可以使用axios发送GET、POST等请求: ```js axios.get('http://example.com/api') .then(response => { console.log(response.data); }) .catch(error => { console.log(error); }); axios.post('http://example.com/api', {data: 'hello'}) .then(response => { console.log(response.data); }) .catch(error => { console.log(error); }); ``` 当然,axios还支持一些其他的请求方法,比如PUT、DELETE等。 接下来,我们可以使用axios的拦截器对请求和响应进行处理。例如,我们可以在请求头中添加token: ```js axios.interceptors.request.use(config => { const token = localStorage.getItem('token'); if (token) { config.headers.Authorization = `Bearer ${token}`; } return config; }, error => { return Promise.reject(error); }); ``` 在上面的代码中,我们使用了axios的interceptors.request.use方法,它可以在请求被发送出去之前对其进行拦截处理。在这个例子中,我们将localStorage中存储的token添加到请求头中的Authorization字段中。 我们还可以使用axios的interceptors.response.use方法对响应进行处理。例如,我们可以检查响应状态码是否为401,如果是,则跳转到登录页面: ```js axios.interceptors.response.use(response => { return response; }, error => { if (error.response.status === 401) { window.location.href = '/login'; } return Promise.reject(error); }); ``` 在上面的代码中,我们使用了axios的interceptors.response.use方法,它可以在响应被接收之前对其进行拦截处理。在这个例子中,我们检查了响应状态码是否为401,并且在这种情况下跳转到登录页面。 以上就是在Node.js中使用axios请求接口及拦截器的使用方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值