Session与Cookie的概念原理
前言:
本文没有任何代码,内容全部都是概念与运行原理,在使用一个技术前一定要弄清他的本质,下面会讲Session、Cookie、ServletContext的概念与他们的联系区别
Session概念
1.Session是什么?
服务器开辟了一块空间专门存放Session,这个空间叫做Session池,Session池中可以存放多个Session,每个Session对应一个客户端(浏览器),比如你打开360浏览器与IE浏览器这就是2个客户端,此时在Session池中会存在360浏览器对应的Session与IE浏览器对应的Session,而每个客户端都会去找自己对应的Session。
2.Session能做什么?
上面说了Session是什么,但是它能做什么,Session主要做的事情就是存储资源(数据),因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户客户端(浏览器)对应的session中,当用户使用客户端(浏览器)访问服务器程序时,客户端(浏览器)对应的session中取出该用户的数据。
3.Session的获取流程原理图:
1.服务器中会有个专门储存Seesion的空间Seesion池
2.用户打开了一个浏览器发送请求访问项目
3.请求的时候,服务器会根据你这个客户端(浏览器)创建对应的Seesion在Session池中
从上图可以很明显的看出,获取Session不会受Servlet(服务连接器)影响,只会受客户端影响,Session与客户端是一对一的关系,你360浏览器的Session1数据你通过火狐浏览器肯定是取不到,火狐取的是自己对应的Session2,说到这里另一个问题出现了,服务器是怎么把客户端(浏览器)与Seesion对应起来的呢?在回答这个问题前先了解下Cookie吧
Cookie概念
1.Cookie是什么?
Cookie是客户端(浏览器)上储存数据的文件,是存放在客户端(浏览器)里面的。
2.Cookie能做什么?
存储数据,与Session不同的是,Session是存放在服务器上,Cookie是在存放在客户端,
每次客户端(浏览器)发送请求的时候,会把客户端(浏览器)里面所有的Cookiec都发送到服务器去,服务器响应回来的时候会把数据储存到Cookiec发送给客户端(浏览器),其中里面会储存SessionId,从而进行 session 跟踪,把客户端与Seesion关联起来。
3.Cookie的流程原理图
1.客户端(浏览器)发送请求时会把客户端里面所有的Cookie全部传到服务器
2.服务器接收到请求后,服务器响应客户端(浏览器),会把数据储存到Cookiec发送给客户端(浏览器),其中里面会储存SessionId
3.客户端(浏览器)接收到后又储存起来
4.每个客户端(浏览器)都会有属于自己的Cookie。
注:Cookie的生命周期默认是浏览器会话期间,浏览器关闭后,Cookie清空,除非你手动设置Cookie生命周期时间
Session与Cookie的联系、区别
Session与Cookie合并运行原理图:
1.首先客户端(浏览器)发送请求到服务器
2.请求里面会把客户端(浏览器)所有的Cookie带上
3.服务器接收到请求
4.内部开始处理,首先从客户端(浏览器)带过来的Cookie里面获取SessionID
5.拿SessionID去Session池中查询
6.如果没有查询到对应的Session或SessionID是空,重新新建一个Session到Session池中
7.如果查询到了直接获取对应Session
8.把数据存入客户端(浏览器)带过来的Cookie,其中就有SessionID,响应给客户端(浏览器)
9.客户端得到响应并把Cookie储存起来
10.接着从1-9循环
Session与Cookie的联系区别:
联系:客户端获取Session需要通过Cookie里面的SessionId,Cookie就是客户端与Session的中间桥梁。
区别:同样是存储数据,但是一个是服务器端,另一个是在客户端
ServletContext概念
ServletContext是什么?
ServletContext是Web容器给每个应用程序创建的一个公共空间,每个应用程序都会对应一个ServletContext上下文(公共空间),他的公共范围在对应的应用程序之内。
ServletContext能干什么?
存储数据、提供一些Web容器的功能。
ServletContext与Session的区别:
ServletContext与Session都可以存储数据,但是他们最大的区别则是范围区别,Session的访问范围受限客户端而ServletContext的访问范围受限应用程序。
举个例子:
360浏览器访问项目往ServletContext与Session分别存储了number : 1( 键值对应),在360浏览器中ServletContext、Session通过key值number获取到value值1。
打开火狐浏览器,用ServletContext通过key值number获取到value值1,用Session通过key值number获取到null。
Session与Cookie的概念原理的更多相关文章
- 关于token,session,cookie的概念和区别
记录几篇讲的比较好的文章 https://www.cnblogs.com/moyand/p/9047978.html https://blog.csdn.net/wabiaozia/article/d ...
- Jmeter之处理session、cookie以及如何做关联
具体描述问题之前,我们先了解下session.cookie session.cookie的概念 1.session是放在服务器上的,过期与否取决于服务期的设定,cookie是存在客户端的,过去与否可以 ...
- cookie&session的Q&A故事[原理篇]
引语:cookie和session在网站开发中,起着无可厚非的重要作用,但是我们平时往往都只是通过某种语言作为介质,通过某些接口函数进行cookie和session的操作,而对其原理可能不了解或一知半 ...
- session和cookie的作用和原理
session和cookie作用原理,区别 Cookie概念 在浏览某些 网站 时,这些网站会把 一些数据存在 客户端 , 用于使用网站 等跟踪用户,实现用户自定义 功能. 是否设置过期时间: 如果不 ...
- cookie、session和token的概念
Cookie.Session和Token都是为了解决Web身份校验而产生的,这里对它们的概念做一个简单了解. Web身份校验的发展 很久很久以前,Web基本上就是文档的浏览而已.既然是浏览,作为服务器 ...
- Session和Cookie的原理
1.session和cookie的存储 session一般保存在服务端文件中,php.ini中有个配置项--session.save_path='';这个里面填写的路径,将会使session文件保存在 ...
- Session与Cookie的原理以及使用小案例>从零开始学JAVA系列
目录 Session与Cookie的原理以及使用小案例 Cookie和Session所解决的问题 Session与Cookie的原理 Cookie的原理 Cookie的失效时机 小提示 Session ...
- Session与Cookie概念
摘:一.Session机制session是一种服务器端的状态管理技术,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息.当程序需要为某个客户端的请求创建一个session的时候,服务 ...
- [Java] Servlet工作原理之二:Session与Cookie
(未完成) 一.Cookie与Session的使用简介 1 Cookie Cookie 用于记录用户在一段时间内的行为,它有两个版本:Version 0 和 Version 1,分别对应两种响应头 S ...
随机推荐
- HDU6127Hard challenge
Hard challenge Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) ...
- 利用echarts highcharts 实现自定义地图 关系图效果 侧边3D柱形图饼图散点图
github 地址: https://https://github.com/Gengshaoxuan/medataMap github 地址: https://https://github.com ...
- JAVA提高十二:HashMap深入分析
首先想说的是关于HashMap源码的分析园子里面应该有很多,并且都是分析得很不错的文章,但是我还是想写出自己的学习总结,以便加深自己的理解,因此就有了此文,另外因为小孩过来了,因此更新速度可能放缓了, ...
- 11) 十分钟学会android--Intent消息处理与传递详解
一个Android app通常都会有多个activities. 每个activity的界面都扮演者用户接口的角色,允许用户执行一些特定任务(例如查看地图或者是开始拍照等).为了让用户能够从一个acti ...
- Velocity(7)——velocity进阶用法
1.截取部分字段substring 1 原始字符串:$!ag.tagValue,也许很长,前端页面展示时需要截取字符串. 2 #set($str=$!ag.tagValue) 3 4 #if($str ...
- hibernate flushMode 错误
1 十一月 15, 2017 10:13:36 上午 org.apache.struts2.dispatcher.Dispatcher error 2 严重: Exception occurred d ...
- linux 内存 大于 jvm xmx
文章来源: http://www.cnblogs.com/guozp/p/7845605.html 1.虽然你jvm参数设置了-Xms6g -Xmx6g,但操作系统不并会马上分配6G的物理内存,而是确 ...
- java 导出blob图片到excel
实现功能,导出当前页面显示员工的图片,核心代码已给出,仅供参考, 如需转载请注明出处http://www.cnblogs.com/wangjianguang/p/7852060.html 随便再扯2句 ...
- [转]动态管理视图和函数 (Transact-SQL)
动态管理视图和函数返回可用于监视服务器实例的运行状况.诊断故障以及优化性能的服务器状态信息. 重要提示 动态管理视图和函数返回特定于实现的内部状态数据. 在未来的 SQL Server 版本中,它们的 ...
- Quartus FFT IP核简介
为了突出重点,仅对I/O数据流为steaming的情况作简要说明,以便快速上手,有关FFT ip核模型及每种设置详细介绍请参考官方手册FFT MegaCore Function User Guide. ...