York's Blog

Cookie与登录注册

表单

后端一定要验证数据,前端可以不验证,因为有点人会用crurl发请求
应该确保后端安全,前端安不安全无所谓
出现bug打log
李爵士规定HTTP传输不能有@,@都会被转换成%40,所以要用decodeURIComponent把%40转换成@,
存数据库必须存字符串
JSON.stringify:JSON.stringify()方法是将一个JavaScript值(对象或者数组)转换为一个 JSON字符串

1
2
3
try{users=JSON.parse(users) //尝试是否符合JSON语法
}
catch(exception){users=[]} //如果有问题就变成空数组

响应头 cookie cache-control

  1. Cookie 是浏览器访问服务器后,服务器传给浏览器的一段数据。
  2. 浏览器需要保存这段数据,不得轻易删除。
  3. 此后每次浏览器访问该服务器,都必须带上这段数据。
    Cookie 就是这么简单,这就是 Web 开发里 Cookie 的含义。
  1. 服务器通过 Set-Cookie 响应头设置 Cookie
  2. 浏览器得到 Cookie 之后,每次请求都要带上 Cookie
  3. 服务器读取 Cookie 就知道登录用户的信息(email)
  1. 我在 Chrome 登录了得到 Cookie,用 Safari 访问,Safari 会带上 Cookie 吗
    no
  2. Cookie 存在哪
    Windows 存在 C 盘的一个文件里
  3. Cookie会被用户篡改吗?
    可以,Session 来解决这个问题,防止用户篡改
  4. Cookie 有效期吗?
    默认有效期20分钟左右,不同浏览器策略不同
    后端可以强制设置有效期,具体语法看 MDN
  5. Cookie 遵守同源策略吗?
    也有,不过跟 AJAX 的同源策略稍微有些不同。
    当请求 qq.com 下的资源时,浏览器会默认带上 qq.com 对应的 Cookie,不会带上 baidu.com 对应的 Cookie
    当请求 v.qq.com 下的资源时,浏览器不仅会带上 v.qq.com 的Cookie,还会带上 qq.com 的 Cookie
    另外 Cookie 还可以根据路径做限制,请自行了解,这个功能用得比较少。

Set-Cookie

1
response.setHeader('Set-Cookie',`log_in_email=${email}`) //设置一个cookie

1
let cookies =  request.headers.cookie.split('; ') //读取这个cookie
第一个作用是识别用户身份。

比如用户 A 用浏览器访问了 http://a.com,那么 http://a.com 的服务器就会立刻给 A 返回一段数据「uid=1」(这就是 Cookie)。当 A 再次访问 http://a.com 的其他页面时,就会附带上「uid=1」这段数据。
同理,用户 B 用浏览器访问 http://a.com 时,http://a.com 发现 B 没有附带 uid 数据,就给 B 分配了一个新的 uid,为2,然后返回给 B 一段数「uid=2」。B 之后访问 http://a.com 的时候,就会一直带上「uid=2」这段数据。
借此,http://a.com 的服务器就能区分 A 和 B 两个用户了。

第二个作用是记录历史。

假设 http://a.com 是一个购物网站,当 A 在上面将商品 A1 、A2 加入购物车时,JS 可以改写 Cookie,改为「uid=1; cart=A1,A2」,表示购物车里有 A1 和 A2 两样商品了。

这样一来,当用户关闭网页,过三天再打开网页的时候,依然可以看到 A1、A2 躺在购物车里,因为浏览器并不会无缘无故地删除这个 Cookie。
借此,就达到里记录用户操作历史的目的了。
(上面的例子只是为了让大家了解 Cookie 的作用而构想出来的,实际的网站使用 Cookie 时会更谨慎一些。)

  1. 可以在 HTTP-Response 内设置标签确定 Cookie 的过期时间
  2. Expires指定了一个日期/时间, 在这个日期/时间之后 Cookie 过期
  3. max-age指定了一个秒数,经过此秒数后 Cookie 过期
  4. 如果不设置这个标头,则默认关闭浏览器后 Cookie 过期
  1. 服务器端可以通过设置 Expires、max-age 两个标签将 Cookie 设置为过期状态
  2. JavaScript 可以通过document.cookie API 删除 Cookie

Cookie的缺陷

  1. Cookie会被附加在每个HTTP请求中,所以无形中增加了流量。
  2. 由于在HTTP请求中的Cookie是明文传递的,所以安全性成问题,除非用HTTPS。
  3. Cookie的大小限制在4KB左右,对于复杂的存储需求来说是不够用的。
Proudly published with Hexo