cookie,又是cookie。工作中与cookie打交道很多次,不过时间跨度也大,每总结多一次,就加深了解多一点。
cookie,一定是放在浏览器中的,用于浏览器保存一些小额度的内容。每次我们去访问服务器的时候,cookie都会附着在请求报文中,一起发送给服务器。服务器中没有cookie,它只是操作浏览器发送过来的cookie而已。也因为如此,我们在服务器端的代码中处理cookie的时候,比如变更某个cookie的值,其实这个更改对于浏览器而言,还没有生效,一定要返回到浏览器中,才会将这个更改真正实施。当然,在服务器端中,跟更改一个其他变量,比如session,没有什么两样,改了就是改了。
注意:每次我们去访问服务器的时候,cookie都会附着在请求报文中,一起发送给服务器,但并不是所有的cookie都会发送,而是将当前访问的网站,相同顶级域名下的cookie随同发送。好比说,我浏览器访问过百度和网易,那么这两个站点都有cookie。当我访问百度的时候,浏览器就只发送百度的cookie;访问网易,就只发送网易的cookie。如果访问百度的时候,想访问网易的cookie,那叫跨域请求,好像比较困难。
更多的情况下,是子域名访问父域名、顶级域名的cookie。好比说,baidu.com是顶级域名,www.baidu.com、news.baidu.com都是二级域名,http://guonei.news.baidu.com/是三级域名,……,如此类推。那么,顶级域名的cookie,二级、三级、子孙级等都能访问。反过来,子孙的域名是否能被父辈级域名访问,好像也可以,具体不记得了。
总之,cookie有一个域。
相同域名且同等级域名下,可以直接操作,无须指明域,node.js下也是如此:
response.cookie('logFlag', 'out');
但如果这个cookie是父级的,那么就要指明域,否则更改不了(但似乎可以直接读取):
response.cookie('logFlag', 'out',{domain:'.baidu.com'});
第3个参数是个json,除了指明域名,还可以指明过期时间,路径,等等,看需要。
现在的浏览器,可以看到这个cookie。比如我用chrome打开某个网站,然后按F12,然后选NetWork标签,左边列表点开cookie,情况会一目了然,很是好用。