一.导论
动态服务器与静态服务器的判断依据是什么?
- 没有请求数据库,就是静态服务器;
- 请求了数据库,就是动态服务器;
(1)形象理解
按照我的理解,就如打王者一样,人机模式:自己玩(静态服务器),排位模式:上网与别人一起开黑(动态服务器)。
(2)准备工作
新建DB,用JSON 来充当数据库。
1.读取数据库
新建的TEST文件,进行测试
响应结果
可以通过TEST文件得到JSON里的内容
2.数据库写入数据
先读后写,运行几次,就写几次。
在TEST里写入数据
DATABASE NOTE:
在读和写的过程中,读要反序列化(对象化)得到数组;写要序列化(字符串化) 得到字符串。
二.应用(定个小目标)
目标1
(1)实现用户注册功能:
- 用户提交用户名和密码
- users.json 里新增一行数据
(2)思路:
- 前端写一个form,让用户填写name 和password
- 前端监听 submit事件
- 前端发送post 请求 ,数据库委于请求体
- 后端接收post请求
- 后端 获取请求体中password 和name
- 后端存储数据
(3) 图示
1. 上传数据
- 代码截图
-
创建表单,注册页面
-
提交 (AJAX请求)上传一个JSON文件
效果
配置服务器路径
效果
2. 在数据库里增加数据
如何拿到POST请求的数据
做法:
- 先声明一个数组
- 把数据放在数组里(数据可能是分段上传)
- 监听上传事件,每次上传一点,就PUSH一点
读数据库然后给数据库添加数据 每次点击,JSON文件都会增加相应的数据
目标2
(1)实现用户登录功能:
- 首页home.html ,已经登录用户可以看到自己的用户名
- 登录页sign_in.html,供提交用户名和密码
- 输入的用户名和密码如果匹配,自动跳到首页
(2)思路:
- 前端写一个form,让用户填写name 和password
- 前端监听 submit事件
- 前端发送post 请求 ,数据库委于请求体
- 后端接收post请求
- 后端 获取请求体中password 和name
- 后端读取数据,看是否匹配
登录的后端逻辑
目标3
识别用户是否登录
(1) 所用的知识: Cookie
定义:Cookie 是服务器下发给浏览器的一段字符串,浏览器必须保存这个字符串(除非用户自己删除),然后发起相同的二级域名请求(任何请求)时,浏览器必须附上Cookie。
举个生活中的栗子:你和女票去迪士尼,必须得有门票,Cookie就是门票,你没买门票,你和女朋友就没能去玩,然后,你女朋友就和你就分手了。一个Cookie引发的惨案~
(2)但是这个门票什么时候发给你呢?
在登录匹配成功的时候发给你门票。
没有票(不能白嫖)
note :Cookie 不能让前端得到,会被修改的!
加入这个代码即可。
(3) 怎么知道登录的是谁呢?
做法:把logined 改成 user_id
使用无痕浏览,单独访问home.html 会显示用户没有登录
(4)怎么查看登录的有户名? 首先获取用户的ID
目标4
防篡改user_id
(1)解决方案:
- 思路1 :加密
将user_id 加密发送给前端,后端读取解密 , 有安全漏洞(加密后的内容可以无限期使用 (JWT可以解决))
- 思路2:把信息隐藏在服务器里
将用户的信息放在服务器里,再给一个随机的id 将随机的id发送给浏览器,后端下次要读取id时,通过X[id]获取用户信息(因为随机,所以id很长,用户无法篡改)这里X是文件(session(会话))
本文所有的代码
总结
本文讲述了什么是动态服务器,以及用户注册、用户登录、Cookie、以及怎么防止他人篡改ID等知识。