动态服务器

静态服务器和动态服务器的区别
请求的数据库就是动态服务器,没请求数据库就是静态服务器。

const fs = require("fs");

// 读数据库
//序列化
const usersString = fs.readFileSync("./db/users.json").toString();
//反序列化得到数组
const usersArray = JSON.parse(usersString);


// 写数据库
const user3 = {id:3, name:'tom', password: 'yyy'}
usersArray.push(user3)
//序列化得到字符串
const string = JSON.stringify(usersArray)
fs.writeFileSync('./db/users.json', string)

1. 实现用户注册功能
用户提交用户名和密码,users.json中就新增一行数据。
register.html思路:

  1. 前端写一个form,让用户填写name & password
  2. 前端监听submit事件。
  3. 前端发送post请求,数据位于请求体。
  4. 后端接受post请求,获取请求体中的name & password
  5. 后端存储数据

惯例:要兼容手机,先抄袭淘宝的meta
2. 实现用户登录功能
首页home.html,已登录用户可以看到自己的用户名;
登录页sign_in.html供提交用户名和密码。
输入的用户名密码如果是匹配的,就自动跳转页面。
sign_in.html思路

  1. 前端写一个form,让用户填写name & password
  2. 前端监听submit事件。
  3. 前端发送post请求,数据位于请求体。
  4. 后端接受post请求,获取请求体中的name & password
  5. 后端读取数据,看是否有匹配的name和password,如果匹配后端就标记用户已登录,可是怎么标记呢?

Cookie

定义:

  1. Cookie是服务器发送给浏览器的一段字符串
  2. 浏览器必须保存这个Cookie(除非用户删除)
  3. 之后发起相同二级域名请求(任何请求)时,浏览器必须附上Cookie

但是我们会担心用户篡改Cookie,用户会不会修改user_id呢?

那我们该如何防止用户篡改user_id呢
思路一:加密
将user_id加密发送给前端,后端读取user_id时解密。
但是这种方法有漏洞——加密后的内容可无限期使用。
解决办法:JWT
思路二:把信息隐藏在服务器中

  1. 把用户信息放在服务器的session(会话)里,再给信息一个随机id
  2. 把随机id发送给浏览器
  3. 后端下次读取到id时,就能通过session[id]获取用户信息。
    session是个文件而不是内存,不能用内存,因为断电内存就清空
    这种方式就叫做注销,而注销功能如何实现呢?
  4. 安全起见,不能用 JS 删 Cookie,应该使用 HTTP only 的 Cookie,然后 JS 发请求让服务器删 Cookie
  5. 安全起见,除了删除浏览器端的 Cookie,还需要把对应的 Session 数据删掉

session的时效性

两种思路的区别在于,思路一采取加密的方法,一旦泄密就会导致永久泄密。
而思路二的session是有时效性的可以随时删除,用户重新登陆后会获得一个全新的id。

Session 保存在服务器的文件中
服务器一般会将 Session id 放到 Cookie 中,发放给浏览器

Cookie 是服务器发放给浏览器的一段字符串
每次请求相同的二级域名(如 qq.com)时,必须带上之前发放的 Cookie

你可能感兴趣的:(动态服务器)