• 0
  • 0
分享
  • cookie、session、sessionid与jsessionid
  • 饭团🍙 2022-06-24 16:18:40 字数 2531 阅读 727 收藏 0

cookie、session、sessionid与jsessionid,要想明白他们之间的关系,下面来看个有趣的场景来帮你理解。

我们都知道银行,银行的收柜台每天要接待客户存款/取款业务,可以有几种方案:

凭借柜台职员的记忆,由收柜台职员来为每位顾客办理存款/取款业务,单凭职员的记忆力,要记到每位顾客的相貌,并迅速这个顾客当前的存款以及存取的次数,每次存取的金额是多少。

-----------这种方式表示协议本身支持状态。

使用存折的方式,然后柜台职员就把每个顾客的存款/取款的信息保存在这张折子,然后交给顾客保管,当顾客来存款/取款时,只要拿出存折,职员查看存折就对当前这位顾客的存款/取款信息一目了然。当然,你马上会想到,顾客修改这个信息怎么办?我们也有措施对每次存款/取款记录后面盖章。无盖章的就是假冒信息。但如果顾客是真的要伪造,当然印章也是可以伪造的。

-------------这种方式就是在客户端端保持状态。

使用银行卡的方式,发给每位银行用户一张银行卡,银行卡上有一个唯一的卡号,没有其它任何信息,当顾客来存款/取款时,拿出银行卡,银行把卡号输入的电脑,很快就显示当前用户的存/取款记录。这种方式的安全性就会有很大的提高。用户想要手脚只有攻破银行的服务器来修改自己的存/取款信息,这样做难度会很大。

---------这种方式就是服务器端保持状态。

Cookie与session的产生过程

我们都知道HTTP协议本身是无状态的,客户只需要简单的向服务器来发送请求下载某些文件,客户端向服务器端发送的每次请求都是独立的。对于当前的web应用,HTTP的“无状态”,导致许多应用都不得不花费大量的精力来记录用户的操作步骤。就像我们上面介绍的第一种情况,银行职员要花费大量的精力来记忆每一位用户的存/取款记录。

程序员很快发现,如果能够提供一些按需生成的动太信息,会使web的交互能力大大增强。程序员一方面在HTML中添加表单、脚本、DOM等客户端行为,来增加web应用与客户端的交互性。另一方面在服务器端测出现了CGI规范以响应客户端的动态请求,作为传输载体的HTTP协议添加了文件上载、cookie等特性。那cookie的原理与我们上面介绍的使用存折记录用户应为的方式是一样一样的。

通过前面的例子我们已经发现,通过cookie的方式存储信息,可能会存在一点定的安全性,因为所有的信息都是写在客户端的,客户可能会对这些信息进行修改或清除。然后就又出现session的方式用于保存用户行为,这种方式的原理与前面介绍银行卡的方式是一样的。

具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上它还有其他选择。

cookie与session的机制与原理

cookie机制。正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成cookie。而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。

cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。

session机制。session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。

当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识------------称为sessionid,如果已包含则说明以前已经为此客户端创建过session,服务器就按照sessionid把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含sessionid,则为此客户端创建一个session并且生成一个与此session相关联的sessionid,sessionid的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个sessionid将被在本次响应中返回给客户端保存。

保存这个sessionid的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发挥给服务器。一般这个cookie的名字都是类似于SEEESIONID。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时仍然能够把sessionid传递回服务器。

经常被使用的一种技术叫做URL重写,就是把sessionid直接附加在URL路径的后面。还有一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把sessionid传递回服务器。

Jsessionid?

Jsessionid只是tomcat的对sessionid的叫法,其实就是sessionid;在其它的容器也许就不叫jsessionid了。


作者:虫师

原文链接:https://www.cnblogs.com/fnng/archive/2012/08/14/2637279.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   性能测试是描述测试对象性能相关特征并对其进行评价而实施的一类测试,是软件测试的重要组成部分,对于保证软件质量起到了至关重要的作用。TPS指单位时间完成的事务数,是衡量服务器承载能力的重要指标,直接体现软件系统性能的承载能力。TPS在性能测试中常作为重点关注的性能指标,目标TPS的计算需要一套科学客观的方法。  一、目标TPS的估算  当前在软件性能测试中估算目标TPS通常都会考虑被测系统未来一段时间的预期交易量,然而对于未来预期交易量往往是项目组凭借主观经验估计一个业务年增长率来进行估算的,缺乏科学客观的预测方法。  因此,我们提出了一种应用时间序列分析中的ARIMA模型估算被测软件未来预...
            12 12 1811
            分享
          •   当地时间7月21日,印度财政部向印度议会通报,包括小米、vivo、OPPO在内的多家中国主要智能手机制造商逃避关税,并在印度非法汇款了至少800亿卢比(约70.2亿元),而印度税务机关只追回了这些公司逃税总额的18%。  印度政府在给印度法院的书面答复中表示,小米公司在2019-2020年度逃税总额为65.3亿卢比,在2020-2021年度逃税总额为2.399亿卢比,在2022-2023年度的逃税总额为46.1亿卢比,即2019-2023年期间累计逃税总额为113.799亿卢比。  2017年至2021年间,OPPOMobilePvtLtd。的逃避关税价值达到了440.3亿卢比。  在总计...
            0 0 650
            分享
          •   版本管理  在项目进行过程中,客户与利益相关者的一些需求变更没有办法避免。  产品负责人需要一个好的方式来管理这些需求以及变更记录。使团队成员能够清楚地了解每个发布中需要做的新特性或优化。此外,合理地重用需求还可以大大减少重复劳动,提高团队的生产率。  需求池  一个需求管理的难点就是建立需求池,并将它与业务体系相关联。当与业务使用场景结合起来时,才有价值。根据业务系统,产品负责人还可以组织对需求进行组织,从而让团队成员更好地了解需求。  变更影响  实际上,需求不仅是文字记录,还包括结构化的信息,它们之间存在着多重依赖和引用关系。改变需求会导致一系列其他需求,包括影响范围、特征、用户故事...
            0 0 597
            分享
          •   关于软件测试行业的职业发展方向,在网络上总能看到各种各样的问题。  · 有关注零基础能不能入行的  · 有关注25岁入行晚不晚的  · 还有关注35岁后的职业发展方向的  ······  在此过程中,看到很多行业大佬分享了自己的工作经验,也给出了很多自己的建议——要想在测试行业有更长远的发展,一定要关注自己的职业发展道路,也就是你的晋升之路。为此我做了以下三点总结:  一、软件测试职业发展方向情况  业内人士表示,“由于我国的软件行业已经突破了作为一种工业化产品的阶段,软件测试已经成为软件开发企业不可或缺的质量监控部门。目前,我国软件测试人才的数量相对滞后于产业升级,从而形成了软...
            0 0 701
            分享
          • 一、功能测试1、链接测试  (1)测试所有链接是否按指示的那样确实链接到了该链接的页面;(2)测试所链接的页面是否存在;(3)保证Web应用系统上没有孤立的页面(所谓孤立页面是指没有链接指向该页面,只有知道正确的URL地址才能访问)。2、表单测试(1)注册、登陆、信息提交等,必须测试提交操作的完整性,以校验提交给服务器的信息的正确性;(2)用户填写的出生日期与职业是否恰当,填写的所属省份与所在城市是否匹配等;(3)检验默认值的正确性;(4)如表单只能接受指定的某些值,测试时跳过这些字符,看系统是否会报错。3、Cookies测试(session测试同)(1)Cookies是否起作用;(2)Coo...
            0 0 1069
            分享
      • 51testing软件测试圈微信