Http中Cookie和Session介绍
先介绍下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介绍的更多相关文章
- flask中cookie和session介绍
flask中cookie和session介绍 一.cookie: 在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.co ...
- flask中cookie和session设置
flask中cookie和session介绍 一.cookie: 在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户. ...
- 在pycharm中批量插入表数据、分页原理、cookie和session介绍、django操作cookie
昨日内容回顾 ajax发送json格式数据 ''' 1. urlencoded 2. form-data 3. json ''' 1. ajax $.ajax({ data: JSON.stringi ...
- 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂
浅谈JS中的!=.== .!==.===的用法和区别 var num = 1; var str = '1'; var test = 1; test == num //tr ...
- thinkphp中cookie和session中操作数组的方法
thinkphp中cookie和session中操作数组的方法 一.ThinkPHP模板中如何操作session,以及如果session中保存的是数组的情况 在ThinkPHP的模板中操作sessio ...
- PHP中Cookie与Session的异同以及使用
Cookie与Session的异同: 一.cookie机制 Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器.IETF RFC 2965 HTTP State Mana ...
- Java cookie和session介绍与区别
一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于才服务器端保持状态的 ...
- 关于缓存中Cookie,Session,Cache的使用
文章来源:http://canann.iteye.com/blog/1941173 以前实现数据的缓存有很多种方法,有客户端的Cookie,有服务器端的Session和Application. 其中C ...
- web存储中cookie、session区别
http协议是一种无状态的协议,浏览器对服务器的每一次请求都是独立的.为了使得web能够产生一些动态信息,就需要保存”状态”,而cookie和session机制就是为了解决http协议无状态而产生.c ...
随机推荐
- VS2013编译OpenSSL
简述 OpenSSL是一个开源的第三方库,它实现了SSL(Secure SocketLayer)和TLS(Transport Layer Security)协议,被广泛企业应用所采用.对于一般的开发人 ...
- wordpress学习一: 环境搭建
原来想单独找个linux的机器搞套完整的环境,机器都找好了,环境搞了半天.搞完后,感觉环境什么的不重要,核心是学好php和wordpress,单独的环境维护还开发成本都不小,所以 还是采用 xampp ...
- Jenkins最佳实践
原文:http://www.cnblogs.com/itech/archive/2011/11/14/2248460.html Jenkins最佳实践,其实大部分对于其他的CI工具同样的适用: * J ...
- MyBatis学习总结_11_MyBatis动态Sql语句
MyBatis中对数据库的操作,有时要带一些条件,因此动态SQL语句非常有必要,下面就主要来讲讲几个常用的动态SQL语句的语法 MyBatis中用于实现动态SQL的元素主要有: if choose(w ...
- SSIS ->> 生成时间格式
有时我们需要生成一个文件,文件名的构成是当前时间的特定字符串格式,如yyyyMMddHHmmss 当前时间变成yyyyMMddHHmmss这个格式: (DT_WSTR,4) YEAR(GETDATE( ...
- 【用户分析-用户场景】这TM才是产品思维!
@奶牛Denny :很长一段时间里,市场推广/营销(Marketing)在中国似乎是一个大家很忌讳的词汇.市场推广无非就是夸大包装,炒作一下,卖卖情怀——很多人都是这么觉得的,因为确实有一部分急功近利 ...
- MyEclipse配置Tomcat 并编写第一个JSP程序
安装myeclipse之后配置tomcat服务器,在window里选择servers 选择tomcat的文件夹路径(我的是从别人那里考过来的文件夹) 选中上enable即可 出现了这个界面 在这里可以 ...
- 【verilog】fdisplay中如何保存有符号形式
2014-01-02 10:10:29 参考:http://xilinx.eetop.cn/viewthread-275584 使用系统任务$signed,如 $fdisplay(fp, " ...
- poj - 1258 Agri-Net (最小生成树)
http://poj.org/problem?id=1258 FJ为了竞选市长,承诺为这个地区的所有农场联网,为了减少花费,希望所需光纤越少越好,给定每两个农场的花费,求出最小花费. 最小生成树. # ...
- Java 基础-运算符
Java运算符 算术运算符 赋值运算符 比较运算符 逻辑运算符 位运算符 运算符优先级 1. 算术运算符 运算符 运算 范例 结果 + 正号 +3 3 - 负号 b=4;-b -4 + 加 5+5 1 ...