转载自  cookie、session、sessionid 与jsessionid

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

保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发挥给服务器。一般这个cookie的名字都是类似于SEEESIONID。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。
       经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面。还有一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。

Jsessionid?

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

-------------------最新更新--------

 Terry_Huang  回复:

  给你举个更生动的例子,以前大学的时候,经常去大卡司去喝奶茶,每喝一杯,都可以得到一个印花(第一次喝的时候他会给你个积分卡片),集齐6个印花之后,就可以免费获得一杯奶茶。这样子,印花的信息是保存在客户的积分卡上,你如果不怀好意的话,就自己搞几个神似的印花去骗奶茶喝吧。哈哈,这样子是不是更符合在客户端端保持状态。而拿银行卡去银行取钱,我们的卡只需要保存一个卡号,更多的信息是保存在服务器中,这样也比较符合服务器端保持状态。希望能帮到你。

可能是我的描述不够贴切,积分卡和存折是类似的,用户的存取信息是保存在存折上的,存折又是在客户手里(客户端)可能现在很少有人用存折了,或存折已经被银行取消掉了。

cookie、session、sessionid 与jsessionid相关推荐

  1. 彻底理解cookie,session,localStorage(附代码)

    2019独角兽企业重金招聘Python工程师标准>>> 1. cookie 1.1 什么是cookie cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某 ...

  2. 会话Cookie及session的关系(Cookie Session)

    会话Cookie及session的关系(Cookie & Session) 在通常的使用中,我们只知道session信息是存放在服务器端,而cookie是存放在客户端.但服务器如何使用sess ...

  3. 第二十六天:cookie+session+jsp入门

    1. 会话(Session) 1.1 相关概念 1.1.1 会话 从打开浏览器访问服务器开始,到访问服务器结束(关闭浏览器.到了过期时间)期间,产生的多次请求和响应加在一起就称之为两者之间的一次会话. ...

  4. 用ILSpy查看Session.SessionID的生成算法

    缘由 asp.net Session在InProc模式下,容易丢失,经常需要重新登录,且不支持分布式共享. 所以在研究Redis实现原生的Session,本来想用GUID作为key存入cookie,又 ...

  5. C# 系统应用之Cookie\Session基础知识及php读取Cookie\Session

    本文主要是毕业设计"个人电脑使用记录清除软件"系列系统应用文章中关于Cookie方面的知识,主要从介绍Cookie的基础知识和PHP关于Cookie\Session两个会话管理机制 ...

  6. Cookie ,Session

    会话技术 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话.会话技术就是记录这次会话中客户端态的状与数据的. 会话技术分为Cookie和Session: Cookie:数据存储在 ...

  7. node --- [express] cookie/session 机制与 中间件的使用(路由守卫)

    说明 源代码 记忆.遗忘回顾 使用 cookie/session 机制,让 客户端/服务器 的访问变得有状态 cookie 与 session 由于 HTTP 协议的无状态性,当一次连接断开后. 服务 ...

  8. Cookie / Session 的机制与安全

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. Cookie和Session是为了在无状态的HTTP协议之上维护会话状态,使得服务器可以知道当前是和 ...

  9. js获取session_学习后端鉴权系列: 基于Cookie, Session认证

    说起鉴权大家应该都很熟悉, 不过作为前端开发来讲, 鉴权的流程大头都在后端小哥那边, 但是作为一个有志气的开发者肯定要好好学习整个鉴权流程以及方案, 不然怎么跟后端合作. 常见的鉴权方案 基于Cook ...

最新文章

  1. 在node.js中,使用基于ORM架构的Sequelize,操作mysql数据库之增删改查
  2. 小哥质疑谷歌顶会论文有错,并且拿出了复现代码来证明
  3. 安卓怎么连接服务器的数据库文件,安卓怎么连接服务器的数据库文件
  4. javascript--arguments callee caller
  5. Opencv多通道分离函数split()和多通道合并函数merge的使用
  6. Linux/unix 查看端口占用
  7. [转载] C Primer Plus 第6章 C控制语句 6.16 编程练习及答案
  8. Qt文档阅读笔记-GridLayout QML Type解析与实例
  9. [导入]Fedora Linux 9 的硬盘安装
  10. 暑期集训 Day2 简单博弈论
  11. ImageView之android:tint= 属性方法作用详解
  12. 内存颗粒与内存体质的关系
  13. ps-黑白老照片快速上色
  14. 移动、电信光猫超级管理员密码
  15. Day 5 E. Arranging The Sheep
  16. 鸟枪换炮读源码系列之ArrayList(java11)
  17. 八年级上学期计算机教学计划,第一学期七八年级信息技术教学计划
  18. RK3399学习笔记 1.0.3---python环境 Firefly Core-3399pro-jd4 Win10上RKNN工具安装
  19. 一文看懂推荐系统:物品冷启05:流量调控
  20. 发现一个舔狗神器,Python真的太厉害了,自动下载妹子视频...

热门文章

  1. 加密封装 怎么把_不要再封装各种Util工具类了,这个神级框架值得拥有!
  2. makefile 打印变量_[Makefile] 缩进与空格--记录踩过的坑
  3. 蓝桥杯-卡片-填空题
  4. 7-1 装载问题 (10 分)(思路+详解)
  5. [RabbitMQ]什么是MQ
  6. [C++11]decltype在泛型编程中的使用举例
  7. [蓝桥杯2016初赛]凑算式-dfs,next_permutation
  8. HDU 6703 array(主席树 + set)
  9. 【ZJOI2019】线段树【线段树上dp】【大讨论】
  10. CF653F. Paper task