平时的工作中,我们总听到别人谈到,cookies。听他们说了之后,我也试着了解了一下,可还是弄不明白它到底用来干啥的,翻了很多资料也不清楚它的深意。今天在这里也写写我自己对cookie的了解。
cookie是什么,如何使用cookie?
1、Cookie是保存在客户端的纯文本文件。比如txt文件。所谓的客户端就是我们自己的本地电脑。当我们使用自己的电脑通过浏览器进行访问网页的时候,服务器就会生成一个证书并返回给我的浏览器并写入我们的本地电脑。这个证书就是cookie。一般来说cookie都是服务器端写入客户端的纯文本文件。下面我们来看一下一般网站写给我们的cookie 文件如下:
2、Cookie 文件必须由浏览器的支持,在浏览器中可以设置阻止cookie。这样服务器端就不能写入cookie 到客户端了。目前,大多数浏览器都支持cookie。如谷歌、IE、火狐等。一般来说cookie都不能阻止,因为,有时访问网站时必须使用cookie。否则网站将不能被访问。
3、那么,难题来了,我们用这个东西到底干什么用呢?举个例子,比如我们到网站上买东西,我打开买鞋的网页,这时候我发了请求,告诉服务器,你给我返回一些鞋的信息和列表,这时候客户端和服务器端的连接就断开了。用户再次去访问,将某双鞋加入到了购物车后连接又断开了。这时用户又想买条裤子,用户将裤子也加入了购物车,此时连接又断开了。到这时,用户又再次发请求说,我要结账了,然后用户打开一个新的结账界面,现在问题来了,这个用户刚刚加入的购物车的东西服务器是怎么知道的呢?服务器是怎么知道是这个用户买的东西呢?那么现在就用到了cookie 了。在seesion出现之前,一般网站都是通过cookie保存请求的内容,服务器根据用户进行特定的内容展示。也就是说如果不使用cookie,我们将不能在浏览器中看到购物车的东西这就类似于浏览器的收藏夹,如果我们收藏了,下次我们再打开浏览器窗口就会看到我们收藏的东西。也就是说cookie保存了一个前后的状态,如果不用cookie我就不知道我是否已经加入购物车了。那为什么会出现这种情况呢?归根结底,就是因为http的无连接性。
cookie 到底是怎么工作的呢?
首先当我们访问某个网站时,服务器首先根据浏览器的编号生成一个cookie 返回给客户端。客户端下次再访问时就会将自己本地的cookie 加上url访问地址一同给服务器。服务器读出来以此来辨别用户的状态。那么下面我们来画一个图来说明一下:
有时候,我们在买东西的时候加入购物车的内容不想保存到数据库中,而是直接保存到cookie中。用户访问查询购物车时只要cookie没有失效就可以从本地查询,不需要访问数据库,这样加快了查询速度并且保存了用户的状态。在这里说明一下,cookie包含两种类型,一种是保存在内存中的cookie。这种一般是服务端没有设置生存周期,也就是maxage为负数或者0 。这种cookie只在当前会话中有效,关掉浏览器窗口后cookie就立即失效。还有一种是保存在本地客户端的cookie,这种一般是服务器设置了cookie的生存周期maxage为正数,不管你关掉窗口还是重新打开浏览器,还是重启机器,只要cookie不失效,那么访问此网站时,浏览器就会找对应的webapplication的cookies(自己写入的)。存储在本地文件的cookie可以被多个ie浏览器窗口共享,意思就是说,如果我打开一个新的浏览器窗口,输入网页地址,我们只能看到本地文件的cookie,而上一个窗口中的内存中的cookie不能再新窗口中看到。如果我们在父窗口打开一个子窗口,子窗口会继承父窗口的所有类型的cookie。当然如果你将本地cookies删除,那么购物车就不会查到了。下面我用ie浏览器给大家做个演示。
以卖书网站为例如下:
首先清除本地cookies。iE浏览器的cookie在C:\Documents and Settings\用户名\Cookies下。需要注意的是Documents and Settings是隐藏文件,如果要访问首先查看我的文章“系统无法访问文件夹拒绝访问的解决方式”,在这里我们先查看cookies/low/的cookies文件。清除之后我们来访问网站:
访问网站后在本地生成了如下cookies 2个
选择本书进行查看后又生成了cookie 覆盖了上次的cookie
选择购买后
再买一本后
过一会后等购物车的数量刷新后
每次点一下主窗口cookies一直在变化 如下
点击查看购物车后,可以看到有两本书,并且本地存储又发生变化了
由此可见,我们的cookies一直是在变化的。当我们关闭窗口重新访问依然可以看到购物车里的商品。
因为上述的演示都是查看的low文件夹下的cookies文件变化。当我们使用ie清除浏览器缓存(直接从本地删除不能起到同样的效果,我做实验了,但是不知道为什么。)后,我们再次刷新购物车页面
可以看到无任何购物商品了。
此外,cookie文件也可以用来存放用户的登录信息。只有第一次登录的时候访问数据库,只要设置了过期时间,下次再登录后直接读取cookie存储的登录信息,即可达到不登录就可以访问网页的效果。综上讲述了cookie的文件的实时变换情况,到目前为止,我们对cookie应该有个大致的了解了。我将要写一篇关于session的文章,也希望我们共同进步。谷歌浏览器的查看cookie情况,请查看我的文章“谷歌浏览器如何查看cookies”
注意事项:
2、cookie保存到客户端,session保存到服务器端