session&cookie没有出现的黑暗时代

  大家都知道,HTTP协议是一种无状态的协议,本次请求下一次请求没有任何的关联,所有没有办法直接用http协议来记住用户的信息,试想一向,每一次点击一个链接都需要需要输入用户名和密码的感觉是一种怎样的酸爽体验,为了体现用户的友好性,于是聪明(lan duo)的程序员们就想到了session这种解决方案,用来记住用户的信息凭证。

session是什么

  其实session没有多神奇的地方,只是保存在服务器的一小段数据而已,然后生成一个唯一标识,记作sessionid,然后把这个sessionid发送给用户,这样每次用户请求的时候只要带着这个sessionid,服务器就能知道这个用户是谁了

cookie是什么

  cookie和session类似,只不过cookie保存在客户端,是以字符串的形式保存的,每次发送http请求的时候,都会把cookie放在请求的首部中,服务器可以通过解析首部从而得到cookie数据,从而得到用户信息,但是由于每次传输cookie需要消耗一定的带宽,所以为了节省资源,程序员们没有把所有的信息都保存在cookie中,而是生成了一个用来记录用户所有信息的id存放在cookie中

session&cookie的生命周期

  如果没有设置生命周期,那么session和cookie的数据是保存在内存中的,随着浏览器的关闭,所有的数据都会丢失,但是如果设置了生命周期,那么在生命周期的时间内,不主动的释放session的话,session会非常顽固的一直存在服务器中,采用这一特性有时候可以进行关键字的记录

用通俗的概念理解session&cookie

  假设服务器是一个大型的商场,用户每次请求就相当于一次购物,那么用户每次购物都需要把私人物品存放在存包处的柜子(session),然后用户会得到一个钥匙(sessionid),通常情况下,用户会把钥匙放在口袋中(cookie),每次购物结束,只需要拿着钥匙直接开启柜子(session)直接拿走自己的个人物品,那么就结束购物了。

  但是实际情况总会有些偏差,假设今天客户是个妹子,穿的是裙子来没有口袋怎么办(客户端禁用了cookie),那么柜台人员只能告诉她你最好把钥匙放在手上(把sessionid放在表单的隐藏域中)或者直接带在脖子上(把sessionid放在url中)

  钥匙放在手上或者口袋里,总有可能被有心人利用,偷到了钥匙,把客户的私人物品给顺手牵羊了(CSRF跨站请求伪造),这样肯定会给用户造成一定的损失,虽然可以通过让管理处的管理人员记住客户的长相(IP地址),但是还是没办法完全保证数据的安全性

  有些时候商场也会造贼,柜子的锁被翘了(session丢失),给客户造成了相当严重的损失,所以为了避免这种情况,存包处的柜子一定要放在安全的地方并且有专人看守(seesion持久化).

  商场经过这一系列的优化操作之后,开了分店了(负载均衡),这个时候如果客户来买东西,只把私人物品存到其中一个商场的话,逛完分店的时候还得回到原来的地方拿东西,肯定会给客户造成相当严重的困扰,于是聪明的商场管理人员就想到了一个折衷的解决方案,在两个商场之间设立了一个专门存放私人物品的地方(服务器集群,session共享),存完东西之后你可以任意的选择一个商场进行购物,买完东西只需要去专门管理私人物品的地方拿回自己的东西就好了

浅析session&cookie的更多相关文章

  1. 浅析Session和Cookie

    Cookie   Cookie的作用,就是当一个用户通过http访问一个服务器时,这个服务器会将一些key/value键值对返回给客户端浏览器,并给这些数据加上一些限制条件,在条件符合时这个用户访问该 ...

  2. session & cookie(li)

    Session & Cookie 一.定义 Session,用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间.Cookie,由服务器端生成,发送 ...

  3. web也是区分前端与后端的,session\cookie辨析

    <1>Ajax交互方式 Ext.Ajax.request( { //被用来向服务器发起请求默认的url url : "", //请求时发送后台的参数,既可以是Json对 ...

  4. http之Session&Cookie

    百度了一波session与Cookie,我发现这东西远比我想象中更复杂(可能是因为我不明白底层的运行原理).网上也是一堆的关于Session与Cookie区别/联系的文章,然而,我看完了还是一脸懵逼的 ...

  5. Asp.net MVC使用Model Binding解除Session, Cookie等依赖

    上篇文章"Asp.net MVC使用Filter解除Session, Cookie等依赖"介绍了如何使用Filter来解除对于Session, Cookie的依赖.其实这个也可以通 ...

  6. Asp.net MVC使用Filter解除Session, Cookie等依赖

    本文,介绍了Filter在MVC请求的生命周期中的作用和角色,以及Filter的一些常用应用场景. 同时针对MVC中的对于Session,Cookie等的依赖,如何使用Filter解依赖. 如果大家有 ...

  7. [转]Asp.net MVC使用Filter解除Session, Cookie等依赖

    本文转自:http://www.cnblogs.com/JustRun1983/p/3279139.html 本文,介绍了Filter在MVC请求的生命周期中的作用和角色,以及Filter的一些常用应 ...

  8. [转载]JavaEE学习篇之——Session&&Cookie

    原文链接: http://blog.csdn.net/jiangwei0910410003/article/details/23337043 今天继续来看看JavaWeb的相关知识,这篇文章主要来讲一 ...

  9. Redis+Django(Session,Cookie)的用户系统

    一.Django authentication django authentication提供了一个便利的user api接口,无论在py中 request.user,参见Request and re ...

随机推荐

  1. iOS小知识点(非UI部分)

    1. _cmd 表示当前方法的@SEL指针, - (void)putString{} 对于这个函数_cmd 等效于@selector(putString)

  2. ARC下OC对象和CF对象之间的桥接(bridge)

    在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环 ...

  3. 《JavaScript DOM编程艺术(第二版)》读书总结

    这本书是一本很基础的书,但对于刚入前端不久的我来说是一本不错的书,收获还是很大的,对一些基础的东西理解得更加透彻了. 1.DOM即document object model的缩写,文档对象模型,Jav ...

  4. MyBatis源码分析(1)——整体依赖关系图

    后续补充更新

  5. 去掉你代码里的 document.write("<script...

    在传统的浏览器中,同步的 script 标签是会阻塞 HTML 解析器的,无论是内联的还是外链的,比如: <script src="a.js"></script& ...

  6. (四)SQL Server分区管理

    一.拆分分区(SPLIT) 在已有分区上添加一个新分区. 如下图所示,将分区03拆分成03和04分区,拆分方式先锁定旧03分区的所有数据,后将旧03分区相关数据迁移到分区04,最后删除旧03上的对应分 ...

  7. Linux C 字符函数 getchar()、putchar() 与 EOF 详解

    首先给出<The_C_Programming_Language>这本书中的例子: #include <stdio.h> int main() { int c; c = getc ...

  8. 利用Nginx实现域名转发 不修改主机头

    在conf下 新建一个 文件 格式 : 域名.conf  例如:www.test.com.conf 文件里配置: server{ listen 80; server_name www.test.com ...

  9. C和指针 第七章 可变参数

    可变参数列表是通过stdarg.h内的宏来实现的: 类型 va_list 三个宏: va_start va_arg va_end 我们可以声明一个va_list变量,与这三个宏配合使用. 可变参数必须 ...

  10. H5案例分享:使用JS判断客户端、浏览器、操作系统类型

    使用JS判断客户端.浏览器.操作系统类型 一.JS判断客户端类型 JS判断客户端是否是iOS或者Android手机移动端 通过判断浏览器的userAgent,用正则来判断手机是否是ios和Androi ...