zoukankan      html  css  js  c++  java
  • web存储中cookie、session区别


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

    2、cookie和session的区别

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

    cookie方案: 发给顾客一张卡,上面记录着消费量,一般还有个时限。每次消费的时候顾客只要出示这张卡,则此次消费的状态就被记录下来了。这就是在客户端保持状态。

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

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

    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可以被浏览器禁止。

    还有一种url重写的技术,就是把session id直接附加在URL路径的后面。

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

    session id一旦被攻击者而已获得,攻击者可以伪装成请求者对服务器发起请求。

    5、总结

    cookie数据存放在浏览器上,session数据存放在服务器上。一般把登陆信息用session保存。

    session会在一定时间内保存在服务器上,当访问增多时,会占用服务器的性能。

    单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

     
  • 相关阅读:
    基础数据结构总结
    图论总结
    【bzoj1614】[Usaco2007 Jan]Telephone Lines架设电话线
    【bzoj1015】星球大战starwar
    NOIP2012摆花
    最勇敢的机器人
    【bzoj1056】排名系统
    图的第k短路
    【bzoj1455】罗马游戏
    ti
  • 原文地址:https://www.cnblogs.com/weiyf/p/8758887.html
Copyright © 2011-2022 走看看