HTTP会话那些事

本篇文章的目的是增进初学者或者有一定工作经验的开发人员进一步的认识了解“会话”,去探究下为什么需要会话以及会话的作用,废话不多说,开拔~

开篇思考这么一个我们日常的行为,大家每天都会通过网络了解各种知识,比如我们去购物网站进行购物,去各种博客论坛去浏览、回复各种感兴趣的东西,这些行为的本质就是对目标服务器上的资源发送了来自同一客户端的多个请求,比如我们可以不用登陆,就可以把各种感兴趣的商品放置到“购物车”里面去,记住此时你感兴趣放入的商品放到是你的购物车里面,而不是别人的购物车里面,这个“购物车”会帮你持有这些你放入的商品,论坛博客等也是类似,只要你单击各种链接,就会向目标服务器发送请求,你会惊讶地发现有个看不见的“手”在帮助你记录,像“购物车”这个例子,好像有个什么手段来唯一标识你的购物车,维持专属于你的各种放入的商品,说到这里,你可能会问是不是通过IP地址作为唯一标识符来记录购物车的商品呢,当然不是啦,你想想在大学校园里面,数以千计的大学生对外都在使用着相同的IP地址,他们真实的IP地址都隐藏在NAT路由之后,对了,到这里你估计会懂了,原来“会话”就是干这个事的,虽然仍然有些抽象;

上面说了有“会话”的样子,那么在谈谈如果没有“会话”会怎么办,没有“会话”意味着无法维持请求和请求之间的状态,说白了对于服务器而言,无法识别明明是来自同一客户端的多个请求到底是不是由同一个客户端发出的,为什么会这样呢?原因在于HTTP请求自身是完全无状态的。从服务器的角度来说,当用户通过浏览器打开第一个连接到服务器的套接字时请求开始到服务器返回最后一个数据包并关闭连接时,请求结束。一旦结束,用户的浏览器和服务器不再有任何联系。即便后期再有从该浏览器发送到服务器端的请求,服务器都无法将新的请求与之前的请求关联起来;同样拿商城中举例子,你在半个小时内,可能会查看20多个商品,并可能会将10个商品放入到你的购物车或者收藏起来,如果没有“会话”,那么你需要在每次添加购物车或者收藏时,都需要自己主动提供你的身份标识信息,诸如用户名和密码,用来说明这个XXX商品需要添加或者收藏到YYY用户的名下,因为服务器搞不清楚此时的请求跟彼时的请求是不是来自同一个浏览器,如此一来,用户可能为此而感到不快;

上面几段分别描述了有“会话”和无“会话”的差别,那么接下来在具体谈谈“会话”到底帮我们干了什么事!

1、维持状态:当你在在线购物网站购物时,无论你是否账号登陆,机制都差不多。当你浏览商品,发现一个喜欢的商品,把它添加到购物车里面去继续浏览,一会又发现了一件商品又添加进购物车。此时,你查看购物车,应该会看到刚刚添加进去的两件商品。在你发出的两个添加指定商品到购物车的请求中,在线购物网站通过某种方式了解到它们是来自于同一计算机中的同一浏览器,并将他们关联到你的购物车。其他人是无法看到你的购物车或者购物车中包含的产品,你的购物车只绑定到你的计算机和浏览器;这个过程跟你去超市购物很相像,即进入超市后取到一个小推车或者篮子,期间在超市浏览各种商品,找到自己喜欢的放到自己的小推车或篮子中,购物完毕到收银台结账,从小推车中取出你的商品付款。出超市时归还小推车或篮子;在这两个例子中购物车、小推车或篮子将始终维持着商品的状态。如果没有它们,你将无法保持希望购买的所有商品,那么只能选一个商品,付款,然后离开,如果需要买20件商品,你将重复做20次购物活动。“会话”是在幕后维持请求之间状态的引擎,你会发现如果没有它,Web将会有极大的变化;

2、记住用户:再来一个论坛的场景,几乎所有的在线论坛,用户都会有自己的用户名。当用户进入论坛时,需要提供用户名和密码作为个人身份准入的验证,这样才能登陆成功。只有登陆成功后,身份才能有“游客”-> “用户”,才可以进行添加论坛主题、回复主题、评论、关注、留言等,需要注意的是在整个一系列过程中,用户只需要登陆一次。系统就通过“会话”机制记住了该用户;

3、应用程序工作流:各种招聘网站提供的在线简历制作应该用过吧,你会发现从开始填写到最终简历成型差不多需要点击三四次“下一步”,在每个“下一步”的页面中根据简历模板内容要求,如个人基础信息->教育背景->掌握的技术简介->项目经验-> 个人简介 等,这五个步骤可以看作是一个简单的工作流,工作流包含了许多步骤,每个步骤的结束都表示单个任务的完成,将所有的步骤结合在一起,就组成了整个工作流,因此在请求之间必须维持一个状态。当然这个例子只是工作流概念的一小部分。

本篇先从一个日常行为引导大家了解什么是“会话”,然后分析了没有“会话”的场景,最后介绍了“会话”的几种应用场景,希望能给大家点启示!

猜你喜欢

转载自blog.csdn.net/yu102655/article/details/79064955