cookie、session、sessionid 与jsessionid之间的关系
举个栗子
以银行收柜台的存款/取款业务为例
可以有几种方案:
>凭借记忆
凭借柜台职员的记忆,由收柜台职员来为每位顾客办理存款/取款业务,单凭职员的记忆力,要记到每位顾客的相貌,并迅速这个顾客当前的存款以及存取的次数,每次存取的金额是多少。
-----------这种方式表示==协议本身==支持状态。
> 凭借存折
使用存折的方式,然后柜台职员就把每个顾客的存款/取款的信息保存在这张折子,然后交给顾客保管,当顾客来存款/取款时,只要拿出存折,职员查看存折就对当前这位顾客的存款/取款信息一目了然。当然,你马上会想到,顾客修改这个信息怎么办?我们也有措施对每次存款/取款记录后面盖章。无盖章的就是假冒信息。但如果顾客是真的要伪造,当然印章也是可以伪造的。
-------------这种方式就是在==客户端==保持状态。
> 凭借银行卡
使用银行卡的方式,发给每位银行用户一张银行卡,银行卡上有一个唯一的卡号,没有其它任何信息,当顾客来存款/取款时,拿出银行卡,银行把卡号输入的电脑,很快就显示当前用户的存/取款记录。这种方式的安全性就会有很大的提高。用户想要手脚只有攻破银行的服务器来修改自己的存/取款信息,这样做难度会很大。
--------------这种方式就是==服务器端==保持状态。
>Cookie 与session的产生过程
无状态的HTTP
我们都知道HTTP协议本身是无状态的,客户只需要简单的向服务器来发送请求下载某些文件,客户端向服务器端发送的每次请求都是独立的。对于当前的web应用,HTTP的“无状态”,导致许多应用都不得不花费大量的精力来记录用户的操作步骤。就像我们上面介绍的第一种情况,银行职员要花费大量的精力来记忆每一位用户的存/取款记录。
引入cookie,客户端按需生成动态信息
程序员很快发现,如果能够提供一些按需生成的动态信息,会使web的交互能力大大增强。程序员一方面在HTML中添加表单、脚本、DOM等客户端行为,来增加web应用与客户端的交互性。另一方面在服务器端测出现了CGI规范以响应客户端的动态请求,作为传输载体的HTTP协议添加了文件上载、cookie 等特性。那cookie的原理就对应于上面介绍的凭借存折记录用户应为的方式。
cookie的引入存在安全性问题,session的出现来保护用户行为
通过前面的例子我们已经发现,通过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的名字都是类似于Ssessionid。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时仍然能够把sessionid传递回服务器。
经常被使用的一种技术叫做URL重写,就是把sessionid直接附加在URL路径的后面。还有一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把sessionid传递回服务器。
Jsessionid?
Jsessionid只是tomcat的对sessionid的叫法,其实就是sessionid;在其它的容器也许就不叫jsessionid了。
【引用】
https://www.cnblogs.com/caiwenjing/p/8081391.html
转载于:https://www.cnblogs.com/Erma/p/10989147.html
cookie、session、sessionid 与jsessionid之间的关系相关推荐
- html与css与php的关系,HTML、PHP、CSS、JS之间的关系
23:02:06 2019-08-05 自己要搭建网站 虽然可以下载大佬的界面 但至少要懂一点web开发的知识 我现在感觉像个憨憨 啥都不明白 HTML负责放你需要显示的内容, 而PHP可以输出可变化 ...
- session,sessionid,cookie之间的关系解析
session,sessionid,cookie之间的关系解析 文章目录 session,sessionid,cookie之间的关系解析 1.简介 2.session和cookie定义,创建,周期和联 ...
- cookie、session、sessionid 与jsessionid
转载自 cookie.session.sessionid 与jsessionid cookie.session.sessionid 与jsessionid,要想明白他们之间的关系,下面来看个有趣的场 ...
- cookie、session与token之间的关系
cookie.session与token之间的关系 token 令牌,是用户身份的验证方式. 最简单的token组成:uid(用户唯一的身份标识).time(当前时间的时间戳).sign(签名). 对 ...
- 会话Cookie及session的关系(Cookie Session)
会话Cookie及session的关系(Cookie & Session) 在通常的使用中,我们只知道session信息是存放在服务器端,而cookie是存放在客户端.但服务器如何使用sess ...
- cookie、session、token、webStorage的关系与区别
cookie session token sessionStorage localstorage 概念 浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能 Session 是将会话中产 ...
- cookie session token 之间的区别
cookie 和session的区别 1.cookie数据存放在客户的浏览器上,session数据放在服务器上. 2.cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗 ...
- 彻底理解cookie,session,localStorage(附代码)
2019独角兽企业重金招聘Python工程师标准>>> 1. cookie 1.1 什么是cookie cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某 ...
- 第二十六天:cookie+session+jsp入门
1. 会话(Session) 1.1 相关概念 1.1.1 会话 从打开浏览器访问服务器开始,到访问服务器结束(关闭浏览器.到了过期时间)期间,产生的多次请求和响应加在一起就称之为两者之间的一次会话. ...
最新文章
- python小项目-python 的一些小项目
- SharePoint 2013 - Callout
- Java中this的简单应用
- 大咖开讲:一小时学会.NET MVC开发的那些事儿
- AUTOSAR从入门到精通100讲(三十六)-AUTOSAR 通信服务两步走-CanSM概念-配置及代码分析
- 【数据结构与算法】实验 编写双链表的结点查找和删除算法
- css就近原则_细品100道CSS知识点(上)「干货满满」
- Node.js:模块查找,引用及缓存机制
- 【华为云技术分享】解析数据治理在过程可信变革中的运作流程
- LINQ简记(3):子句
- java 小球运动轨迹_java怎么实现小球的运动轨迹
- Matlab Gramm绘图工具箱
- 苹果亮度自动调节怎么关闭_找不到“自动亮度调节”?这两个技巧帮你快速更改设置...
- 哪家的云游戏服务器好?如何选择云游戏服务器?
- BehaviorTree + Groot 在ros中的运用
- APM_Rover运行纲领分析,以pixhawk-fmuv2为硬件平台,ChibiOS为底层操作系统:
- 全球首款基于开放式工业控制系统的EdgeIO边缘计算IO模块诞生
- mac word 2016中文输入问题解决
- mysql中rand的用法_MySQL RAND()用法及代码示例
- Latex表格单元格内文本顶着上格线解决
热门文章
- 位于地下88米,一晚6000块,上海这家酒店房间内竟还有玄机!
- 【iOS-Cocos2d游戏开发之二十一 】自定义精灵类并为你的精灵设置攻击帧以及动画创建!【二】...
- CSS 设置背景颜色透明,文字不透明
- linux清理内存的命令
- Android SQLite简单操作示例
- 学习spring必须java基础知识-动态代理
- Linux内核list_head学习(二)
- Python代码分析工具:PyChecker、Pylint
- [swift] LeetCode 62. Unique Paths
- LeetCode 113. Path Sum II