动态服务器

184 阅读2分钟

静态服务器和动态服务器的区别

判断依据

是否请求数据库

  • 请求了, 动态服务器
  • 没请求, 静态服务器

读取数据,存储数据

目标一

实现用户注册功能

  • 用户提交用户名和密码
  • users.json 里就新增了一行数据

思路

  • 前端写一个 form,让用户填写 name 和 password
  • 前端监听 submit 事件
  • 前端发送 post 请求,数据位于请求体
  • 后端接收 post 请求
  • 后端获取请求体中的 name 和 password
  • 后端存储数据

目标二

实现用户登录功能

  • 首页 home.html,已登录用户可看到自己用户名
  • 登录 登录页面,供提交用户名和密码
  • 输入用户名密码如果匹配,就自动跳转首页

登录页面思路

  • 前端写一个 form,让用户填写 name 和 password
  • 前端监听 submit 事件
  • 前端发送 post 请求,数据位于请求体
  • 后端接收 post 请求
  • 后端获取请求体中的 name 和 password
  • 后端读取数据,看是否有匹配的 name 和 password
  • 如果匹配,后端应标记用户已登录

Cookie

定义

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

Set-Cookie 响应头

response.setHeader('Set-Cookie', `user_id=${user.id}; HttpOnly`) 

const cookie = request.headers['cookie']

目标三

显示用户名

  • 首页渲染前获取 user 信息
  • 如果有 user, 则将 {{user.name}} 替换成 user.name
  • 如果无 user, 则显示登录按钮

目标四 防篡改 user_id

思路一: 加密

  • 将 user_id 加密发送给前端, 后端读取 user_id 时解密, 此法可行, 但有安全漏洞
  • 漏洞: 加密后的内容可无限期使用
  • 解决办法: JWT

思路二: 把信息隐藏在服务器

  • 把用户信息放在服务器的 x 里, 再给信息一个随机 id
  • 把随机 id 发给浏览器
  • 后端下次读取到 id 时, 通过 x[id] 获取用户信息