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
;