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。

转载于:https://www.cnblogs.com/weiyf/p/8758887.html

web存储中cookie、session区别相关推荐

  1. java sessionstate_在Java Web开发中自定义Session

    Session在存储安全性要求较高的会话信息方面是必不可少的,对于分布式Web应用自定义Session支持独立的状态服务器或集群是必须的.本文就来教大家如何在Java Web开发中自定义Session ...

  2. Web存储—获取Cookie

    Web存储-获取Cookie

  3. WEB应用中的SESSION详解

    作为一名WEB开发程序员,对session的理解是最基础的,但是现状是WEB程序员遍地都是,随便一划拉一大把,不过估计能把session能透彻理解的人应该不是很多,起码我之前对此是知之甚少,偶然看到的 ...

  4. web.config中的session配置详解

    打开某个应用程序的配置文件Web.config后,我们会发现以下这段: < sessionState mode="InProc" stateConnectionString= ...

  5. Web站点下的Web Service读取此Web站点中的Session值

    在用Ajax:AutoCompleteExtender控件时,碰到自动完成的数据没办法按当前登录用户过滤权限的问题,主要是因为AutoComplete.asmx中自动完成的Method参数是固定的,不 ...

  6. Java Web 之Token+Cookie+Session

    发展史: 1. 早期的WEB基本上就是文档的浏览而已,服务器不需要记录谁在某个时间都浏览了什么文档,每次请求都是全新的HTTP协议. 2. 随着交互式WEB应用的兴起,例如在线购物网站,需要登录的网站 ...

  7. web.config中配置Session

    配置Session的生命周期 model:设置存储会话状态.包括四个状态,分别为:Off(表示禁用会话状态).Inproc(表示工作进程自身存储会话状态).StateServer(表示将把会话信息存放 ...

  8. web.xml中/和/*的区别

    < url-pattern > / </ url-pattern > 不会匹配到*.jsp,即:.jsp不会进入spring的 DispatcherServlet类 . < ...

  9. web.xml中 /和/*的区别

    < url-pattern>/</url-pattern>  会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url < url-patte ...

最新文章

  1. 怎么看懂别人写的单片机项目代码?
  2. Guava Cache用法介绍
  3. ubuntu装jdk
  4. Thinking in Java 14.7 动态代理
  5. 智能优化算法:猎食者优化算法-附代码
  6. VC MakeUp 操作XML
  7. 【控制系统的数学模型——传递函数】
  8. html5考试总结300字,期中考试总结300字(优秀篇)
  9. 独孤求败-小滴云架构大课十八式【xiaoecf】
  10. ATOM Z3000 家族整理之基本信息(一) V2.0版
  11. 认识计算机软件的教学过程,《认识计算机》教学设计
  12. 【笔记】程序性能优化28个策略原则
  13. 老男孩教育Linux50期远程控制连接
  14. 古诗词鉴赏,断句的重要性
  15. 计算机安全反思报告书,计算机数据安全教学反思.doc
  16. 邮件系统排名中企业邮箱有何优势,163邮箱能发国外邮件吗?
  17. h5 cookie获取和设置
  18. ZYNQ基础----裸机USB的使用
  19. MP4 ftyp box解析
  20. NVIDIA编码器和解码器

热门文章

  1. 【Cmake】执行cmake命令时报错:No XSLT processor found
  2. linux驱动:TI+DM8127+GPIO(一)之应用——报警输入输出
  3. mysql 执行计划 什么用_简述MySQL的执行计划的作用及使用方法
  4. android camera工程师,浅析Android Camera架构
  5. java filefilter递归_Java中的递归+文件过滤器
  6. 中计算散度的函数_理解 Kullback–Leibler 散度的近似
  7. mysql数据库移植到另一台电脑,将mysql数据库从一台计算机复制到另一台计算机...
  8. linux下c语言写文件,Linux下C语言之文件操作
  9. simple_html_dom meta,HTML DOM Meta content 属性
  10. 使用beanutil简化request值的接收