先介绍下B/S系统的工作的完整过程。首先客户端的浏览器发出请求,服务端的webserver接受到请求后,调用相关请求的页面进行处理,处理完后将结果发送给客户端的浏览器进行显示。只能是浏览器向webserver发送请求,webserver响应请求,而webserver不会主动的向客户端发送信息。因为它不知道向谁发送哪些信息。把服务端比喻成一个矜持的小姑娘,你问她要什么她才会回答什么。浏览器与webserver的交互是暂时的,当请求响应的过程完毕后,这种连接也随之结束。换句话说webserver根本不理会是哪个浏览器发来的请求,只要请求合理、符合要求,就要对其作出响应。

之所以会向上段介绍的那样,是因为Http是无状态的协议,无法保存浏览器的状态信息。因此需要记住:只有浏览器发送请求,页面才会执行;对于不同客户端对同一个页面发送请求,它们之间的执行是互不干扰的、完全无关的。对于同一浏览器发出的不同页面的请求,也是独立执行的。因为webserver根本就不知道同一浏览器发来的请求,因此不同页面之间的信息也就不能共用。

Http的这种无状态情形,给开发系统带来了很多麻烦,因为绝大部分系统都采用用户机制。为了解决此种情形,出现了Cookie和Session技术。

让我们用几个例子来描述一下cookie和session机制之间的区别与联系。笔者曾经常去的一家咖啡店有喝5杯咖啡免费赠一杯咖啡的优惠,然而一次性消费5杯咖啡的机会微乎其微,这时就需要某种方式来纪录某位顾客的消费数量。想象一下其实也无外乎下面的几种方案:
        1、该店的店员很厉害,能记住每位顾客的消费数量,只要顾客一走进咖啡店,店员就知道该怎么对待了。这种做法就是协议本身支持状态。
        2、发给顾客一张卡片,上面记录着消费的数量,一般还有个有效期限。每次消费时,如果顾客出示这张卡片,则此次消费就会与以前或以后的消费相联系起来。这种做法就是在客户端保持状态。
        3、发给顾客一张会员卡,除了卡号之外什么信息也不纪录,每次消费时,如果顾客出示该卡片,则店员在店里的纪录本上找到这个卡号对应的纪录添加一些消费信息。这种做法就是在服务器端保持状态。
        由于HTTP协议是无状态的,而出于种种考虑也不希望使之成为有状态的,因此,后面两种方案就成为现实的选择。具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上它还有其他选择。 

一、Cookie介绍

Cookie是一种采用将数据保存在客户端硬盘上的技术,是一种远程浏览器端储存数据并以此来跟踪和识别用户的机制。在浏览器向webserver发送请求时候,会首先将Cookie中保存的信息发送出去。因此webserver也就能够根据这些数据判断请求者的状态了。

虽然说cookie给我们带来了诸多的便利,但是其本身也存在些缺点:

第一、Cookie保存在客户端硬盘上,客户端每次发送请求都要发送Cookie。如果cookie数据量比较大,加上每次都要发送,此时会增加网络传输的数据量,增加页面的响应时长,从而降低服务器的工作效率,因此Session技术很好的解决了这个问题;

第二、安全性不高。Cookie采用文本方式储存在本地硬盘,保存在里面的数据很容易被破解。例如把用户名和密码保存在cookie中,任何一个能够使用客户端计算机的人都会很容易的进入这个系统;

第三、有些用户出于安全考虑,会禁用浏览器的Cookie功能。恰好系统是依靠Cookie机制,那这部分人群将无法使用这个系统;

第四、IE浏览器的不完善的缓存机制。

二、Session介绍

Cookie的两大缺点,传输Cookie需要消耗网络资源;保存在本地容易被破解。而Session却可以弥补这两方面。Session保存在服务端,因此安全性更高,速度也更快。将session和cookie两者相结合。cookie只是用来识别用户,而session用来保存数据,这样可以编写出效率更高的系统。

PHP中session的工作原理:

(1)当一个session第一次被启用时,一个唯一的标识被存储于本地的cookie中。

(2)首先使用session_start()函数,PHP从session仓库中加载已经存储的session变量。

(3)当执行PHP脚本时,通过使用session_register()函数注册session变量。

(4)当PHP脚本执行结束时,未被销毁的session变量会被自动保存在本地一定路径下的session库中,这个路径可以通过php.ini文件中的session.save_path指定,下次浏览网页时可以加载使用。

session的缺点:

第一、数据的存取效率不高。session在服务端是以文本文件的方式来保存数据。相对而言,从内存取数据要比从硬盘取数据肯定要快。

第二、无法对目前有效的session进行遍历。也就无法对当前所有连接到服务器上的客户端信息进行遍历,也就无法了解当前所有用户的统计信息,比如当前用户的在线人数。

Http中Cookie和Session介绍的更多相关文章

  1. flask中cookie和session介绍

    flask中cookie和session介绍 一.cookie: 在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.co ...

  2. flask中cookie和session设置

    flask中cookie和session介绍   一.cookie: 在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户. ...

  3. 在pycharm中批量插入表数据、分页原理、cookie和session介绍、django操作cookie

    昨日内容回顾 ajax发送json格式数据 ''' 1. urlencoded 2. form-data 3. json ''' 1. ajax $.ajax({ data: JSON.stringi ...

  4. 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂

    浅谈JS中的!=.== .!==.===的用法和区别   var num = 1;     var str = '1';     var test = 1;     test == num  //tr ...

  5. thinkphp中cookie和session中操作数组的方法

    thinkphp中cookie和session中操作数组的方法 一.ThinkPHP模板中如何操作session,以及如果session中保存的是数组的情况 在ThinkPHP的模板中操作sessio ...

  6. PHP中Cookie与Session的异同以及使用

    Cookie与Session的异同: 一.cookie机制 Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器.IETF RFC 2965 HTTP State Mana ...

  7. Java cookie和session介绍与区别

    一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于才服务器端保持状态的 ...

  8. 关于缓存中Cookie,Session,Cache的使用

    文章来源:http://canann.iteye.com/blog/1941173 以前实现数据的缓存有很多种方法,有客户端的Cookie,有服务器端的Session和Application. 其中C ...

  9. web存储中cookie、session区别

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

随机推荐

  1. Java:IO流之字符流缓冲区详解

    字符流缓冲区: 1.缓冲区的出现提高了对数据的读写效率: 2.对应类:BufferedWriter.BufferedReader: 3.缓冲区要结合流才可以使用: 4.在流的基础上对流的功能进行了增强 ...

  2. Android 图片的缩略图

    <1>简介 之前往往是通过Bitmap.Drawable和Canvas配合完成,需要写一系列繁杂的逻辑去缩小原有图片,从而得到缩略图. 现在我给大家介绍一种比较简单的方法:(网上有) 在A ...

  3. MySQL 数据库性能优化之索引优化

    接着上一篇 MySQL 数据库性能优化之表结构,这是 MySQL数据库性能优化专题 系列的第三篇文章:MySQL 数据库性能优化之索引优化 大家都知道索引对于数据访问的性能有非常关键的作用,都知道索引 ...

  4. 大数据时代下的用户洞察:用户画像建立(ppt版)

    大数据是物理世界在网络世界的映射,是一场人类空前的网络画像运动.网络世界与物理世界不是孤立的,网络世界是物理世界层次的反映.数据是无缝连接网络世界与物理世界的DNA.发现数据DNA.重组数据DNA是人 ...

  5. 运行java -version报cannot restore segment prot after reloc: Permission denied

    linux 安装jdk1.6后,运行java -version,没有出现相关的版本信息,而是出现了以下错误: dl failure on line 685Error: failed /usr/loca ...

  6. PHP的面向对象编程

    面向对象编程的概念: 不同的作者之间说法可能不一样,但是一个OOP语言必须有以下几方面: 抽象数据类型和信息封装 继承 多态 在PHP中是通过类来完成封装的: <?php class Somet ...

  7. 如何从List<T>中筛选符合条件的数据的集合或个数

    方法一:Linq ChannelList就是一个List类型的数据,IsOpen 是其元素的属性 channelCount = (from channel in DevicesManager.Inst ...

  8. 如何快速delete数据

    苦于qa账号,木有drop,truncate权限,同步数据要挨个delete表里边的数据,就写了个脚本,循环删除某个目标库的所有表里边的数据. 先在information_schema的库里边,通过T ...

  9. WMware 10 Ubuntu 12.04 进入Unity模式

    /********************************************************************* * WMware 10 Ubuntu 12.04 进入Un ...

  10. matlab中,在灰度解剖图上叠加阈值图,by by DR. Rajeev Raizada

    1.参考 reference 1. tutorial主页:http://www.bcs.rochester.edu/people/raizada/fmri-matlab.htm. 2.speech_b ...