Cookie 是什么
Cookie是浏览器访问服务器后,服务器传给浏览器的一段数据。- 浏览器需要保存这段数据,不得轻易删除。
- 此后每次浏览器访问该服务器,都必须带上这段数据。
Cookie的容量很小(4KB)。
Cookie 就是这么简单,这就是 Web 开发里 Cookie 的含义。举例来说,用户访问网址www.example.com,服务器在浏览器写入一个 Cookie。这个 Cookie 就会包含www.example.com这个域名,以及根路径/。这意味着,这个 Cookie 对该域名的根路径和它的所有子路径都有效。如果路径设为/forums,那么这个 Cookie 只有在访问www.example.com/forums及其子路径时才有效。以后,浏览器一旦访问这个路径,浏览器就会附上这段 Cookie 发送给服务器。
登录注册中的 Cookie
- 用户注册账号的时候,在提交的时候浏览器会发
POST请求,把用户名和密码写入数据库; - 登陆的时候,浏览器发送
POST` 请求,服务器把用户的用户名密码和数据库里的匹配,如果匹配成功,则发送一个响应头给浏览器,比如
HTTP/1.1 200 OK
Set-Cookie: sign_in_imail=1062233546@qq.com
Connection: keep-alive
Content-Length: 0
[page content]
浏览器得到 Cookie 之后,每次请求都要带上Cookie,比如
GET / HTTP/1.1
Host: localhost:8080
Accept: text/html
Cookie: sign_in_imail=1062233546@qq.com
[page content]
这就是 Cookie,里面记录着你的登陆信息,浏览器会在一段时间内保存 Cookie;
- 当再访问相同域名的网页,浏览器会带着这个
Cookie发送GET请求,服务器读取Cookie与数据库匹配,就知道登录用户的信息。 Cookie的特点- 服务器通过
Set-Cookie响应头设置Cookie - 浏览器得到
Cookie之后,每次请求都要带上Cookie - 服务器读取
Cookie就知道登录用户的信息(email)
- 服务器通过
Set-Cookie 语法
1. 设置 cookie 的名称和值
Set-Cookie: <cookie-name>=<cookie-value>
2. 设置 cookie 的过期时间
Set-Cookie: <cookie-name>=<cookie-value>; Expires=<date>
3. 设置 cookie最长保存时间
Set-Cookie: <cookie-name>=<cookie-value>; Max-Age=<non-zero-digit>
4. 对于哪个域是有效的,所有向该域发送的请求中都会包含这个cookie信息
Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>
5. 指定一个 URL 路径,这个路径必须出现在要请求的资源的路径中才可以发送 cookie 首部
Set-Cookie: <cookie-name>=<cookie-value>; Path=<path-value>
6. 设置 cookie 只有在请求使用 SSL 和 HTTPS 协议的时候才会被发送到服务器。
Set-Cookie: <cookie-name>=<cookie-value>; Secure
7. 不能使用 JavaScript 访问 cookie
Set-Cookie: <cookie-name>=<cookie-value>; HttpOnly
Cookie 相关问题
- 在
Chrome登录了得到Cookie,用Safari访问,Safari会带上Cookie吗 不会 Cookie有效期吗? 默认有效期 20 分钟左右,为什么是左右呢,如果你给浏览器一个Cookie,默认这个Cookie是自动失效的。那什么什么过期呢,浏览器自己决定,不同浏览器策略不同,后端可以强制设置有效期。Cookie遵守同源策略吗? 也有,不过跟AJAX的同源策略稍微有些不同。 当请求qq.com下的资源时,浏览器会默认带上qq.com对应的Cookie,不会带上baidu.com对应的Cookie; 当请求v.qq.com下的资源时,浏览器不仅会带上v.qq.com的Cookie,还会带上qq.com的Cookie;