先介绍下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. [iOS问题归总]SourceTree+osChina版本管理出现的问题

    1.commit失败(1) 解决办法: 把爆红的路径的文件删除掉, 重新commit 2. push时候, 有100MB限制 解决办法: Git只允许上传最大100MB的文件,如果超过,则会被serv ...

  2. 【重走Android之路】【Java面向对象基础(三)】面向对象思想

    [重走Android之路][基础篇(三)][Java面向对象基础]面向对象思想   1 面向对象的WWH   1.1 What--什么是面向对象         首先,要理解“对象”.在Thinkin ...

  3. springMVC找不到JS等文件

     应用springMVC时 JS等文件找不到错误 应用springMVC时如果配置URL映射时如下配置 <servlet>        <servlet-name>appSe ...

  4. 使用grep查找文件中指定字符出现的次数

    grep -o ‘好' 文件名.txt | wc -l -o 指示grep显示所有匹配的地方,并且每一个匹配单独一行输出.这样只要统计输出的行数就可以知道这个字符出现的次数了.

  5. 解决NetworkOnMainThreadException

    今天在Android 访问 WebService 的时候遇到,错误Caused by: android.os.NetworkOnMainThreadException,查了下原因上在4.0之后在主线程 ...

  6. php面向对象的三大特征 封装,继承,多态

    对象的主要三个特性 对象的行为:可以对 对象施加那些操作,开灯,关灯就是行为. 对象的形态:当施加那些方法是对象如何响应,颜色,尺寸,外型. 对象的表示:对象的表示就相当于身份证,具体区分在相同的行为 ...

  7. js中的编码与解码

    一.encodeURI()定义和用法 encodeURI() 函数可把字符串作为 URI 进行编码. 语法 encodeURI(URIstring) 参数 描述 URIstring 必需.一个字符串, ...

  8. java web每天定时执行任务

    第一步: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 ...

  9. check if a linux process is done using bash 检查进程是否在运行

    # cat > check_process_is_end.sh while truedo   sleep 30 # seconds   res=`ps -ef | grep RNAhybrid` ...

  10. JAVA设计模式之【工厂方法模式】

    看例子 1.TV产品接口,负责播放 public interface TV // TV接口 { public void play(); } 2.TV工厂接口,负责生产产品 public interfa ...