cookiecookie英文是什么?在计算机术语中,它是指服务器存储在客户端的一段数据。这段数据会在客户端每次发起http请求时,自动添加到http请求报文中的header中;当服务器响应时,它可以设置cookie并将cookie添加到http响应消息的头部。MDN中对cookie的解释是:cookie是一个请求头,里面包含了之前服务器通过Set-Cookie头服务的HTTPcookies,存储在客户端。Cookies一般存储在对应的域名下,每个浏览器对中一个域名下存储的cookies数量和大小不同。下表是不同浏览器对cookies的存储要求:浏览器chromeSafariFirefoxienumber53unlimited5050size4097bytes4097bytes4097bytes4095bytesexcessprocessingremovetheoldestcookieremovetheoldestcookierandomlyremovethenewest所有浏览器都支持cookie功能,我们可以直接在浏览器中删除cookie和禁用cookie存储。chrome中的设置是:设置-高级-隐私设置和安全-内容设置-Cookies。如果我们在创建cookie时不设置过期时间,即不设置expires或max-age值,则cookie只存在于session中。此时cookie保存在浏览器的内存中,关闭浏览器后cookie自动消失。如果设置了过期时间,cookie将存储在用户的硬盘上。windowsOS下chrome的存放路径为C:DocumentsandSettingsAdministratorLocalSettingsApplicationDataGoogleChromeUserData,firefox的存放路径为:C:DocumentsandSettingsAdministratorLocalSettingsApplicationDataMozillaFirefoxProfilesznyzv8y6.defaultOfflineCachemac下chrome的存放路径为:~/library/applicationsgoogle/铬合金;Safari的存储路径为:~/library/cookies;cookies的工作原理我们知道http协议是一个无状态的协议。在Web应用中,数据交互是通过http协议进行的。交互完成后,客户端客户端与服务器端的连接断开。再次交互需要建立新的连接。这种连接无法记录用户的状态,cookie可以弥补HTTP协议无状态的不足。服务器给客户端发一个通行证,无论谁来访,都必须带上自己的通行证,这样服务器才能从通行证上确认客户端的身份。这就是cookie的工作原理。上图展示了cookies的工作原理:(1)当用户第一次登录时,输入用户名和密码信息,服务器收到后会进行用户认证。(2)服务端验证通过后,生成一个token,以cookie的形式放入http的响应头中,一起返回给客户端。(3)浏览器根据是否设置了cookie的过期时间来判断cookie是sessioncookie还是permanentcookie,并将cookie存储在不同的位置。(4)下次http请求时,请求头中会自动携带存储的cookie。(5)服务器根据请求头中cookie中的token确认用户的身份信息。常见问题前端主动跨域向后端发送cookie在解释这个问题之前,先了解一下什么是跨域。两个域之间是否存在跨域问题,主要根据协议、域名、端口号来判断。只要有区别,就是跨域。例如:(1)不同的协议:http://www.baidu.com和https://www.baidu.com(2)不同的域名:http://www.baidu.com和http://www.google.com(3)端口号不同:http://www.baidu.com:8080和http://www.baidu.com:8000默认情况下,浏览器不能主动跨域发送cookies到后台,并且需要在前端请求时添加配置项{withCredentials:true}。jquery:$.ajax({url:'myurl',method:'GET',xhrFields:{withCredentials:true},success:function(){}});角:$http.get(url,{withCredentials:true}})axios:axios.defaults.withCredentials=true前端配置好后,需要在后端配置:添加配置项"Access-Control-Allow-Credentials","true""Access-Control-Allow”在响应头-Origin”,”yourdomain”还有一些中间件可以帮助我们解决跨域问题,比如express中的express-cors,或者koa方法属性前端cookie中的koa-corssetting:document.cookie='company=eoitek;max-age=10000;domain=eoitek.com;path=/;secure'其中max-age是cookie的过期时间,是一个相对时间,单位ofvalue是seconds,是相对于cookie创建后多少秒才过期的,类似max-age的配置属性是expires,其值为date对象的toUTCString()格式,即Thu,21Sep201806:10:38GMT,指cookie过期的绝对时间。如果max-age和expires都存在,则max-age优先级高。domain是我们设置cookie存放的域,如果不设置就是当前主机的域。path是指存放cookie的目录,默认为当前文件的存放目录。secure,添加该配置项指定cookie只能通过https协议传输。读取:document.cookie读取本域可获取的所有cookie;格式为“