cookie与session的区别

1、什么是cookie和session 

        http协议是一种无状态的协议,浏览器对服务器的每一次请求都是独立的。为了使得web能够产生一些动态信息,就需要保存”状态”,而cookie和session机制就是为了解决http协议无状态而产生。

  • cookie是一种在客户端保存状态的方案,用来记录用户的一些信息,也是实现session的一种方式。
  • session是一种在服务器端保存状态的方案,这个数据可以保存在集群、数据库、文件中。

       我们浏览网站的时候,经常会自动保存账号与密码,这样下次访问的时候,就可以直接登录了。这种技术的实现就是利用了cookie技术。

 

 2、cookie和session的区别 

        在学校旁边的一家面馆,有消费三碗免费一碗的活动。然而一次性消费三碗的可能性很小,需要用某种方式来记录顾客的消费状态,这时就有两种方案: 

  • cookie方案: 发给顾客一张卡,上面记录着消费量,一般还有个时限。每次消费的时候顾客只要出示这张卡,则此次消费的状态就被记录下来了。这就是在客户端保持状态。
  • session方案: 同样发给顾客一张卡,但是卡上只有一个卡号,用来标识用户身份,其他什么都没有。每次顾客去消费时,只要出示这张卡,则店员就在店里的记录本上找到卡号所对应的记录,并且添加一些消费信息。这就是在服务器端保存状态的方法。

        由于session方案需要session id(卡号)将客户端和服务器端连接起来,所以一般session机制需要借助cookie来在客户端保存session id。当然除了cookie还有一种url重写的方法也能够实现session机制。

        服务端通过cookie来识别特定的客户:每次HTTP请求的时候,客户端都会发送相应的cookie信息到服务端。实际上大多数的应用都是用 cookie 来实现session跟踪的,第一次创建session的时候,服务端会在HTTP协议中告诉客户端,需要在 cookie 里面记录一个session id,以后每次请求把这个会话ID发送到服务器,我就知道你是谁了。

 

 3、cookie 

        cookie是由服务端生成,并发送给浏览器,由浏览器将cookie保存到本地文件内。一般在浏览器的”Internet选项->浏览历史记录->设置->查看文件”路径下保存。如图:cookie文件的名字一般是user@domain。 

        cookie文件的内容都是经过加密的,需要经过CGI程序处理。cookie文件的内容有name、value、expire(过期时间)、path、domain(域)、以及secure(安全)。 

path: 指定与cookie关联的页面。 

domain:指定关联的服务器或域。 

secure: 指定cookie的值如何通过网络在用户和web服务器之间传递。缺省情况下,这个属性为空,默认使用http传递数据。如果被标记为”secure”,则使用HTTPS传递数据。 

expire:一般cookie生成时就会被指定一个expire的值,也就是生存时间。在这个周期内cookie是有效的,超过这个周期cookie就会被清除。 

        cookie可以让浏览器记住访问者的特定信息,如上次访问的位置、花费的时间等。cookie最典型的应用就是自动登录,即登录某个站点之后,在有效时间内打开这个站点可以不再输入账号密码而自动登录。 

        cookie实际利用了网页代码中的http头部信息进行传递。浏览器打开一个页面时,服务器会将cookie伴随着网页数据传回到浏览器,浏览器会根据相关设置考虑是否保存cookie。 

        由于cookie中包含了一些敏感信息,虽然信息经过加密,但是如果被别人截获,那么只要把cookie向服务器提交,那么就可以冒充其他人访问服务器。所以一般不要使用自动保存密码等功能。

 

 4、session  

        当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含一个session id。如果有则表明已经为此客户端创建过session,服务器就按照这个session id查找出服务器端保存的session(查找失败的话,会创建一个新的session)。如果请求中不包含session id,则就回创建一个新的session,并把session id返回到客户端进行保存。

        客户端浏览器可以通过cookie保存session id,但是cookie可以被浏览器禁止。

  • 客户端的浏览器禁用Cookie会造成什么问题:

        session 的运行依赖 session id,而 session id是存在 cookie 中的,也就是说,如果浏览器禁用了 Cookie ,同时 session 也会失效。

  • 如何解决?

        cookie可以被人为的禁止,则必须有其他机制以便在Cookie被禁止时仍然能够把Session id传递回服务器。 经常被使用的一种技术叫做 “URL重写”:即每次HTTP交互时,URL路径后面都会被附加上一个诸如 sid=xxxxx 这样的参数(也就是就是把session id直接附加在URL路径的后面),服务端据此来识别用户。

        还有一种表单隐藏字段技术,就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。 

 

5、总结 

  • cookie数据存放在浏览器上,session数据存放在服务器上。一般把登陆信息用session保存。 
  • session会在一定时间内保存在服务器上,当访问增多时,会占用服务器的性能。 
  • 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章