不管是之前的牛腩新闻发布系统,还是最近的asp.net都讲到了session机制和cookie机制,那么究竟它们都是什么东东,竟让这么多的开发者都青睐于它,下面就一起探个究竟。
首先,我们都知道session机制是存储在服务器端的,而cookie是存储在客户端的,session依赖与cookie。你还能继续说出来吗??
当我们浏览网站的时候,web服务器会将一些小小的资料放在你的计算机上,而cookie会帮你在网站上所打的文字或者所做出的一些选择都记录下来。当下次再次光临这个网站,web服务器会先查看它保留的记录中有没有你访问的这些资料,如果有就会根据里面的内容将特定的网页内容展现给你。下面是我从网上找的一幅图:
cookie主要包括:名字、值、过期时间、路径和域。如果不设置过期时间,则表示这个cookie的生命期就只是浏览器的整个会话期,如果关闭浏览器,cookie也就消失,这也就是所说的“会话cookie”。而如果设置了过期时间,那么在没有超过设定的时间之前,浏览器会一直将cookie保存在你的硬盘上,即使关闭浏览器,这些cookie依旧存在。
那么session是干嘛的,为什么说“session依赖于cookie呢?”
首先需要明确的是session是一种会话机制,一个用户的所有请求操作都是一个会话。怎么就是一个会话机制?从生活中打电话这个例子来讲,我们从拨打号码,经过讲话或者占线,最后到挂段。这整整一个过程就是一个会话。如果有些抽象,我们找一个大家熟悉的行为:淘宝或者京东的购物车,当我们看中某一款商品我们都会将它放在购物车,之后我们可以进行数量的编辑或者直接删除这个商品,乃至到很久以后的购买,这一整个过程就是一个session。
session是一种服务器端的机制,服务器使用一种类似于散列表的结构来保存信息。当程序需要为某个客户创建一个session标识时,服务器首先检查这个客户端的请求里是否包含,如果已经包含则检索出来进行使用,如果不包含则新建一个和其他不重复的session标识(session ID)。而保存这个session ID的方式可以采用cookie。
但需要注意:session并不是随着浏览器的关闭而消失的,因为HTTP是一个无状态的协议,客户每次读取web页面,服务器都会打开新的会话,依旧使用购物车的例子。当我们将一些物品加入购物车,那么除非我们自己删除否则系统不会将购物车中的东西删除,所以只有客户端使用session的时间超过服务器为session自动设定的失效时,服务器才会将session删除节省空间。
所以综上所述,cookie可以理解成一个对用户身份的唯一标示符,它的作用就和身份证对我们的作用差不多,它帮服务器识别我们的身份,如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。
这样比对我们应该就不会分不清它们两个了吧。