Cookie 的特点
- 服务器通过 Set-Cookie 响应头设置 Cookie
- 浏览器得到 Cookie 之后,每次请求都要带上 Cookie
- 服务器读取 Cookie 就知道登录用户的信息(email)
问题
我在 Chrome 登录了得到 Cookie,用 Safari 访问,Safari 会带上 Cookie 吗 no
Cookie 存在哪 Windows 存在 C 盘的一个文件里
Cookie会被用户篡改吗? Session 可以解决这个问题,防止用户篡改
Cookie 有效期吗? 默认有效期20分钟左右,不同浏览器策略不同 后端可以强制设置有效期
1
2
3
4
5设置过期时间:
Set-Cookie: <cookie-name>=<cookie-value>; Expires=<date> Expires //用于定义在哪个时间过期
Set-Cookie: <cookie-name>=<cookie-value>; Max-Age=<non-zero-digit> max-age //用于定义在多久之后会过期
删除cookie:
docCookies.removeItem(name[, path],domain)Cookie 遵守同源策略吗? 也有,不过跟 AJAX 的同源策略稍微有些不同。 当请求 qq.com 下的资源时,浏览器会默认带上 qq.com 对应的 Cookie,不会带上 baidu.com 对应的 Cookie 当请求 v.qq.com 下的资源时,浏览器不仅会带上 v.qq.com 的Cookie,还会带上 qq.com 的 Cookie
Session 与 Cookie 的关系
一般来说,Session 基于 Cookie 来实现。
Cookie
- 服务器通过 Set-Cookie 头给客户端一串字符串
- 客户端每次访问相同域名的网页时,必须带上这段字符串
- 客户端要在一段时间内保存这个Cookie
- Cookie 默认在用户关闭页面后就失效,后台代码可以任意设置 Cookie 的过期时间
- 大小大概在 4kb 以内
Session
- 将 SessionID(随机数)通过 Cookie 发给客户端
- 客户端访问服务器时,服务器读取 SessionID
- 服务器有一块内存(哈希表)保存了所有 session
- 通过 SessionID 我们可以得到对应用户的隐私信息,如 id、email
- 这块内存(哈希表)就是服务器上的所有 session
LocalStorage
- LocalStorage 跟 HTTP 无关
- HTTP 不会带上 LocalStorage 的值
- 只有相同域名的页面才能互相读取 LocalStorage(没有同源那么严格)
- 每个域名 localStorage 最大存储量为 5Mb 左右(每个浏览器不一样)
- 常用场景:记录有没有提示过用户(没有用的信息,不能记录密码)
- LocalStorage 永久有效,除非用户清理缓存
SessionStorage(会话存储)
1、2、3、4 同上
- SessionStorage 在用户关闭页面(会话结束)后就失效。
Cookie 和 Session 的区别
Cookie 保存在客户端,每次都随请求发送给 Server Session 保存在 Server 的内存里,其 Session ID 是通过 Cookie 发送给客户端的
Cookie 和 LocalStorage 的区别
LocalStorage 不会随 HTTP 发给 Server LocalStorage 的大小限制比 Cookie 大多了
LocalStorage 和 SessionStorage 的区别
一个不会自动过期,一个会自动过期。
Cache-Control: max-age=1000 缓存 与 ETag 的「缓存」有什么区别?
Cache-Control 直接不发请求。 而 ETag 要发请求才行。
登录注册
服务端代码server.js
1 | var http = require('http') |
sign_up
1 | <body> |
sign_in
1 | <body> |
index.html
1 | <body> |