1 注册登录流程
- Frank打开注册页面sign-up,填写email和password,然后以POST请求发送给服务器。
- 如果格式是正确的(email地址正确,两次password一样),那么服务器就会编写数据,将email和password记录在数据库里,然后返回给Frank注册成功。
- Frank打开登录页面sign-in,填写email和password,以POST请求发送给服务器。
- 服务器得到数据,验证这个邮箱和密码是否在数据库中,如果是,那么会设置一个Cookie,setCookie: email:xxxx@xxxxx.com,发送给Frank。
- 浏览器会记录下这个Cookie。 第二次打开首页的时候,会发送一个GET请求,并且带上这个Cookie,给服务器。
- 服务器读取Cookie,看到email,然后根据email找到user(find-by email),拿到这个user的对应信息(用户填了啥就拿到啥),然后在index.html这个首页中把对应信息填入,并且将这个新的页面响应给用户。
简单来说:注册就是编写数据库,登录就是对比数据库。
2 Cookie
HTTP Cookie(也叫Web Cookie或浏览器Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie可以看成一张门票,门票可以有很多种模式
- 服务器通过set-Cookie响应头设置Cookie 如:
<cookie-name>=<cookie-value>
一个 cookie 开始于一个名称/值对
Expires=<date>
(可选)cookie 的最长有效时间,形式为符合 HTTP-date 规范的时间戳
Max-Age=<non-zero-digit>
(可选)在 cookie 失效之前需要经过的秒数
HttpOnly
(可选)设置了 HttpOnly 属性的 cookie 不能使用 JavaScript 经由Document.cookie
和Request
APIs 进行访问,以防范跨站脚本攻击(XSS)。 - 浏览器得到 Cookie 之后,每次请求都要带上 Cookie(进去玩每次都要带门票)
- 服务器读取 Cookie 就知道登录用户的信息(email)
问题:
- 我在 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 还可以根据路径做限制,请自行了解,这个功能用得比较少。