导航菜单

node

9

说一下cookie是什么

说什么是会话

能够登录

知道中间件是什么

目标:使用用户表中记录的用户和相应密码登录

11833111-37eb81f266f1b438.png

Image.png

分析想法:

创建/login路由以显示login.html页面

创建/检查登录路由,检测用户名,检测密码,注册会话

1接收用户名和密码:req.body

2检测用户名:从ali_admin中选择*,其中user_name=?

用户名是正确的,否则用户名不正确==

3检测密码:将表单提交密码与上一个查询中的密码进行比较

4显示成功/失败,页面跳转

代码实现:

创建/login路由以显示login.html页面

11833111-84ab90da855a8529.png

Image.png

11833111-0ce668750e13afda.png

Image.png

创建/检查登录路由,检测用户名,检测密码,注册会话

1接收数据==>接收用户名和密码

2拼接SQL语句==>从user_name=?的用户中选择*?和user_pwd=?

3执行SQL语句==> db.query()

4处理SQL执行结果==>如果用户名密码被正确地重定向到学生信息列表页面,如果它没有错误地跳回登录页面

11833111-4305598a68dcbb81.png

Image.png

http协议的缺陷

无状态,即无内存,不能允许同一浏览器和服务器多次交换数据,从而实现业务连续性。

什么是会话控制

会话控制是解决http无内存的问题。能够==在客户端(浏览器)或服务器端保持数据==,以便浏览器和服务器多次交换数据,从而实现连续性。

会话控制的分类

Cookie:将数据保留到客户端(浏览器)

会话:将数据保存到服务器端

Cookie是一种将数据保存到客户端的技术。

网站可以将数据写入浏览器,网站可以在一个浏览器中写入多达20个cookie。现在浏览器可以写更多

浏览器最多可以设置300个cookie,每个cookie不能超过4kb。

Cookie可以保存在文件和内存中。

Cookie应用示例---数千人(猜你喜欢)

11833111-2ee76dff93ca95ba.png

Image.png

核心:==cookie返回到浏览器,响应头==

设置cookie的核心思路:使用res.setHeader或writeHeader在响应头中设置cookie信息

Cookie设置格式:key=value; expires=time

密钥: cookie的名称

值:与名称

对应的值

到期日:有效期

11833111-391339f446be2b86.png

Image.png

查看响应标头:

11833111-cff2eb0da333bb36.png

Image.png

在浏览器中查看已保存的Cookie:

11833111-a66aa44dcd0b90f5.png

Image.png

11833111-02fbff39b6a77ca4.png

Image.png

核心:req.headers.cookie

到期时间设置为expires指定的到期时间

为了设置过期,关闭浏览器cookie将消失

因为cookie是存储在客户端上的数据,所以它不够安全,因此会话出现。

会话将数据保存到服务器(存储在文件,内存服务器或数据表中),并确保安全性。

使用express设置会话时,需要使用第三方模块--- express-session

使用步骤:

加载快速会话模块

将会话注册为中间件

使用req.session对象设置/读取会话

当浏览器关闭时,会话消失

快速会话将会话保存在内存中,并且每次重启服务器时都会消失,即使浏览器会话没有关闭。

核心:req.session.destroy()销毁所有会话

在网站上设置会话,整个网站都可以找到此会话

核心:成功登录后注册会话信息,并检查每个页面中是否存在会话

想法:

在/checkLogin中,当正常登录时,用户信息和登录状态记录在会话

在/login和/checkLogin

之外的其他路由侦听器中添加会话检测步骤

注意:会话需要使用快速会话模块,首先加载模块并注册为中间件

代码实现:

在app.js中加载快速会话模块并注册为中间件

11833111-e6e4c736b8038e52.png

Image.png

在/checkLogin中,当正常登录时,用户信息和登录状态记录在会话

11833111-fd06fb956f926647.png

Image.png

检测其他路由中的会话(即检查session.isLogin是否为真)

11833111-a1ad49e88c009adc.png

Image.png

浏览器第一次访问带有cookie设置的路由时,服务器将通过响应头将cookie信息返回给浏览器

然后,每次浏览器访问服务器时,浏览器都会通过请求标头将cookie信息发送到服务器。

11833111-b9497bd16073eb9b.png

Image.png

当浏览器首次访问具有会话设置的路由时,服务器将自动生成一个sessionId(一个非常长的随机字符串),它有两个函数。

1当cookie返回浏览器时,它会保存在浏览器中(==相当于一个键==)

2在服务器中打开一个内存并用sessionId命名,并将数据保存在内存中(==等效于一个框==)

每次浏览器访问服务器时,sessionId将与请求一起发送到服务器,服务器将能够使用sessionId

自来水生产过程:

11833111-2be836a0792b932e.png

Image.png

d: /aaa/ABC.jpg:拦截文件后缀并转换为小写

11833111-92f5c50a70a1c22e.png

Image.png

上图中的lastIndexOf,slice,toLowerCase方法可以视为中间件

按顺序调用中间件,处理字符串d: /aaa/ABC.jpg以获得最终结果

Express是用于路由和中间件的Web框架。 Express应用程序本质上是一系列中间件函数调用。

==express expressware是一个特殊的url地址处理程序==

此函数有三个基本参数:req,res,next

Req是回调函数中的req对象

Res是回调函数中的res对象

下一步:执行中间件时自动进入下一个中间件

案例1:记录中间件

目标:每当浏览器输入要访问的地址时,将当前访问的URL和时间保存到run.log文件

使用fs.appendFile将url地址和时间记录到每个路由侦听器中的run.log文件

11833111-f29247c3f502cba6.png

Image.png

缺点:fs在每个路由侦听器中写入文件,非常麻烦

封装将run.log作为函数编写的方法

11833111-e2c77d9bf3bceba4.png

Image.png

将writeLog封装为中间件函数并注册为中间件

11833111-784e3be9ebd6c354.png

Image.png

案例2:自定义URL检测中间件,不存在的URL地址直接显示

11833111-6226970b8fa6758d.png

Image.png

11833111-d2622c7c862a225b.png

Image.png

方法:在/login和/checkLogin

之外的每个路由中检查isLogin的状态

11833111-acdcbcd98cbe6184.png

Image.png

Express有五个中间件类别:

应用程序级中间件:安装在应用程序上的中间件,例如:app.use()

路由级别的中间件:中间件安装在路由器对象上,例如:router.get(),router.post

错误级别中间件:回调函数app.use中有四个参数((err,req,res,next)=> {})

内置中间件:express.static(),Express提供的唯一内置中间件

第三方中间件:由非快速框架提供的中间件,需要程序员手动安装;解析表格数据