Cookie与登录注册
表单
后端一定要验证数据,前端可以不验证,因为有点人会用crurl发请求
应该确保后端安全,前端安不安全无所谓
出现bug打log
李爵士规定HTTP传输不能有@,@都会被转换成%40,所以要用decodeURIComponent把%40转换成@,
存数据库必须存字符串
JSON.stringify:JSON.stringify()方法是将一个JavaScript值(对象或者数组)转换为一个 JSON字符串1
2
3try{users=JSON.parse(users) //尝试是否符合JSON语法
}
catch(exception){users=[]} //如果有问题就变成空数组
响应头 cookie cache-control
Cookie(曲奇饼) 是什么
- Cookie 是浏览器访问服务器后,服务器传给浏览器的一段数据。
- 浏览器需要保存这段数据,不得轻易删除。
- 此后每次浏览器访问该服务器,都必须带上这段数据。
Cookie 就是这么简单,这就是 Web 开发里 Cookie 的含义。
Cookie 的特点
- 服务器通过 Set-Cookie 响应头设置 Cookie
- 浏览器得到 Cookie 之后,每次请求都要带上 Cookie
- 服务器读取 Cookie 就知道登录用户的信息(email)
Cookie 的问题
- 我在 Chrome 登录了得到 Cookie,用 Safari 访问,Safari 会带上 Cookie 吗
no - Cookie 存在哪
Windows 存在 C 盘的一个文件里 - Cookie会被用户篡改吗?
可以,Session 来解决这个问题,防止用户篡改 - Cookie 有效期吗?
默认有效期20分钟左右,不同浏览器策略不同
后端可以强制设置有效期,具体语法看 MDN - Cookie 遵守同源策略吗?
也有,不过跟 AJAX 的同源策略稍微有些不同。
当请求 qq.com 下的资源时,浏览器会默认带上 qq.com 对应的 Cookie,不会带上 baidu.com 对应的 Cookie
当请求 v.qq.com 下的资源时,浏览器不仅会带上 v.qq.com 的Cookie,还会带上 qq.com 的 Cookie
另外 Cookie 还可以根据路径做限制,请自行了解,这个功能用得比较少。
如何使用 Cookie
Set-Cookie1
response.setHeader('Set-Cookie',`log_in_email=${email}`) //设置一个cookie
1 | let cookies = request.headers.cookie.split('; ') //读取这个cookie |
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 时会更谨慎一些。)
Cookie 如何设置过期时间?如何删除 Cookie?
- 可以在 HTTP-Response 内设置标签确定 Cookie 的过期时间
- Expires指定了一个日期/时间, 在这个日期/时间之后 Cookie 过期
- max-age指定了一个秒数,经过此秒数后 Cookie 过期
- 如果不设置这个标头,则默认关闭浏览器后 Cookie 过期
Cookie 的删除有不同方式
- 服务器端可以通过设置 Expires、max-age 两个标签将 Cookie 设置为过期状态
- JavaScript 可以通过document.cookie API 删除 Cookie
Cookie的缺陷
- Cookie会被附加在每个HTTP请求中,所以无形中增加了流量。
- 由于在HTTP请求中的Cookie是明文传递的,所以安全性成问题,除非用HTTPS。
- Cookie的大小限制在4KB左右,对于复杂的存储需求来说是不够用的。
Comments