Cookie和Session的总结
1、开篇
在之前学习这一段的时候我一直有点没弄清楚,其实对Session这块的理解还可以,但是Cookie感觉始终还是欠缺点火候。之后的很长一段时间都基本上很少用Cookie了,渐渐的也淡忘了这一块的知识。
昨天我鼓起勇气,看了一些网上的资料了一些之前学习的资料,对着两个知识点进行一个小总结。希望可以帮助到观看这篇随笔的读者们。
2、Cookie和Session的介绍 (会话管理技术概述)
(1) 什么是会话?
这里的会话指的是web开发中的一次通话过程,当打开浏览器,访问网站地址后,会话开始,当关闭浏览器(或者到了过期时间),会话结束。
例如:
我们去网吧上网,在吧台拿到用户名和密码,然后找机器登录,这时候机器就认识了我们,我们就可以开始上网,这就相当于我们开启了一次上网的会话,当我们点击结束下机(或者遇到关机重启),
或者上网时间到了,这时候机器就不再认识我们,那么就叫会话结束。
(2)会话管理技术能做什么?
共享同一个客户浏览器多个请求中数据,例如购物车。(简单权限过滤)
3、会话管理技术一(Cookie)
(1)什么是cookie?
它是客户端浏览器的缓存文件,里面记录了客户端浏览器访问网站的一些内容。它也是Http协议请求和响应消息头的一部分。
(2)cookie能做什么?
能保存客户端浏览器访问网站的相关内容,需要服务器开启cookie。从而每一次访问时,先从本地获取缓存,使用资源共享,并且提高效率。
(3)Cookie的说明。
Cookie有大小,个数限制。每个网站最多只能存20个cookie,且大小不能超过4kb。(32bit 不能超过4096MB)同时,所有网站的cookie总数不超过300个。
(4)Cookie中的属性
属性:
name:必要属性,cookie的名称。
value:必要属性,cookie的值(不能是中文)
---------------------------可选属性---------------------------------
path:cookie的路径(重要)
domain:cookie的域名(重要),相当于访问的网站(localhost)
maxAge:cookie的生存时间(相当于生命周期的活着)(比较重要),
当删除cookie时,设置该值为0。
当不设置该值时,使用的是浏览器的内存,当关闭浏览器之后,cookie将丢失。设置了此值,就会保存成缓存文件(值必须是大于0的,以秒为单位)。
version:cookie的版本号。(不重要)
comment:cookie的说明。(不重要)
(5) 在web应用中如何设置和获取Cookie
定义一个Cookie
Cookie cookie = new Cookie(cookieName,cookieValue);
HttpServletRequest 获取 Cookie
Cookie[] cookies = request.getCookies();
该方法返回的是一个数组。(为什么是数组呢,方便,可以直接拿到与该请求相关的所有cookie)
HttpServletResponse 添加Cookie
response.addCookie(cookie);
添加一个cookie,其实就是添加一个响应消息头
response.setHeader("Set-Cookie","name=value;path=;maxage=;domain=");
(为什么没有set方法,原因是set就会把之前的覆盖,所以每次都是添加)。
如何确定一个唯一的cookie:cookieName+cookiePath+cookieDomain
定位一个cookie是由 cookie的名称和路径,主机(访问的资源)三部分组成
4、会话管理技术二(Session)--Tomcat的默认过期时间是30分钟。
(1)什么是Session?
它是一个服务端会话对象,存储用户的会话数据。
(2)获取session的两种方式
方式一:request:getSession();
查看是否有jsessionid;1)有通过jsessionid获取session;2)有这块区域就直接用了。
2) 没有这块区域就开辟一块session区域。
1)没有直接开辟一块session的区域。
方式二:request:getSession(Boolean b);true和上面的方法一样,下面是false的解释。
查看是否有jsessionid;1)有通过jsessionid获取session;2)有这块区域就直接用了。
2) 没有直接返回null
1)没有直接返回null
(3)HttpSession对象的状态
a、什么是持久态
把长时间不用,但还不到过期时间的HttpSession进行序列化,写到磁盘上。
我们把HttpSession持久态也叫做钝化。(与钝化相反的,我们叫活化。)
b、什么时候使用持久化
第一种情况:当访问量很大时,服务器会根据getLastAccessTime来进行排序,对长时间不用,但是还没到过期时间的HttpSession进行持久化。
第二种情况:当服务器进行重启的时候,为了保持客户HttpSession中的数据,也要对HttpSession进行持久化。
5、关于jsessionid说明
当我们在JAVA后台获取到一块session空间的时候,返回时已经将这块session的id也就是jsessionid代入到浏览器的cookie中(前提是cookie打开),如果你的浏览器cookie没有打开,
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//将字符集设置,放在方法体首位
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("text/html;UTF-8");
HttpSession session = request.getSession();
System.out.println(session);
String reUrl = response.encodeRedirectURL("TestServlet");//浏览器cookie没有打开只用这个方法,可以在url后面加上jsessionid,保持会话的持续,注意的是需要所有的跳转都加上这个方法才可以保持jsessionid的拼接
response.sendRedirect(reUrl);
}
例如:http://localhost:8080/ssm/TestServlet;jsessionid=059A89AE1D32790B3DB6C61C5E138DD1
带jsessionid的url到后台后,可直接获取session,如果存在获取到的session对象是和之前一样的对象。
打印结果:
一月 04, 2017 11:16:10 上午 org.apache.catalina.core.StandardContext reload
信息: Reloading Context with name [/ssm] is completed
aaaaaaaaaaaaaaa
org.apache.catalina.session.StandardSessionFacade@194c6bd
org.apache.catalina.session.StandardSessionFacade@194c6bd
一月 04, 2017 11:16:18 上午 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring FrameworkServlet 'appServlet'
一月 04, 2017 11:16:18 上午 org.springframework.web.servlet.FrameworkServlet initServletBean
信息: FrameworkServlet 'appServlet': initialization started
Cookie和Session的总结的更多相关文章
- java的会话管理:Cookie和Session
java的会话管理:Cookie和Session 1.什么是会话 此处的是指客户端(浏览器)和服务端之间的数据传输.例如用户登录,购物车等 会话管理就是管理浏览器客户端和服务端之间会话过程产生的会话数 ...
- Cookie和Session的那些事儿
Cookie和Session都是为了保持用户的访问状态,一方面为了方便业务实现,另一方面为了简化服务端的程序设计,提高访问性能.Cookie是客户端(也就是浏览器端)的技术,设置了Cookie之后,每 ...
- django的cookie和session以及内置信号、缓存
cookie和session cookie和session的作用: cookie和session都记录了客户端的某种状态,用来跟踪用户访问网站的整个回话.两者最大的区别是cookie的信息是存放在浏览 ...
- Cookie和Session的区别
前言 HTTP是一种无状态的协议,为了分辨链接是谁发起的,就需要我们自己去解决这个问题.不然有些情况下即使是同一个网站我们每打开一个页面也都要登录一下.而Session和Cookie就是为解决这个问题 ...
- 本地数据Store。Cookie,Session,Cache的理解。Timer类主要用于定时性、周期性任务 的触发。刷新Store,Panel
本地数据Store var monthStore = Ext.create('Ext.data.Store', { storeId : 'monthStore', autoLoad : false, ...
- Cookie与Session
再说Cookie与Session之前,先要了解一下http协议. 何为http协议: http协议即超文本传输协议,一种基于浏览器请求与服务器响应的协议,该协议主要的特点就是它是一种无状态的协议(只针 ...
- 【转】Cookie和Session区别和联系详解
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
- 理解Cookie和Session机制(转)
目录[-] Cookie机制 什么是Cookie 记录用户访问次数 Cookie的不可跨域名性 Unicode编码:保存中文 BASE64编码:保存二进制图片 设置Cookie的所有属性 Cookie ...
- cookie 和session 的区别详解
这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪 ...
随机推荐
- 【AR实验室】ARToolKit之制作自己的Marker/NFT
0x00 - 前言 看过example后,就会想自己动动手,这里改改那里修修.我们先试着添加自己喜欢的marker/nft进行识别. 比如我做了一个法拉利的marker: 还有网上找了一个法拉利log ...
- 加深一下BlockingQueue的认识
认识BlockingQueue BlockingQueue是一种可以阻塞线程的队列,java中对这种队列提供了方法抽象,BlockingQueue则是抽象的接口. add:添加元素到队列里,添加成功返 ...
- JS核心系列:浅谈函数的作用域
一.作用域(scope) 所谓作用域就是:变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的. function scope(){ var foo = "global&quo ...
- webapi - 模型验证
本次要和大家分享的是webapi的模型验证,讲解的内容可能不单单是做验证,但都是围绕模型来说明的:首先来吐槽下,今天下午老板为自己买了套新办公家具,看起来挺好说明老板有钱,不好的是我们干技术的又成了搬 ...
- Aaron Stannard谈Akka.NET 1.1
Akka.NET 1.1近日发布,带来新特性和性能提升.InfoQ采访了Akka.net维护者Aaron Stannard,了解更多有关Akka.Streams和Akka.Cluster的信息.Aar ...
- PHP-----文件系统的交互
本文讲解php中于文件交互中所使用的函数 代码示例 <html> <head> <title> File Detail </title> </he ...
- interpreter(解释器模式)
一.引子 其实没有什么好的例子引入解释器模式,因为它描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发编译器中:在实际应用中,我们可能很少碰到去构造一个语言的文法的情况. 虽然你几乎用 ...
- VS2015墙内创建ionic2
开始学习ionic2,试验各种方法,感觉以下是紧跟rc版本的最佳方案 STEP1 设置cnpm npm install -g cnpm --registry=https://registry.npm. ...
- ENode 2.8 最新架构图简介
ENode架构图 什么是ENode ENode是一个.NET平台下,纯C#开发的,基于DDD,CQRS,ES,EDA,In-Memory架构风格的,可以帮助开发者开发高并发.高吞吐.可伸缩.可扩展的应 ...
- 微信硬件H5面板开发(一) ---- 调用openApi
微信硬件平台是微信推出连接物与人,物与物的IOT解决方案.也就是说可以通过微信控制各种智能设备.比如一些蓝牙设备.空调.电视等等. 我本身不懂硬件(虽然是电子信息专业),硬件是北航的两个研究生在弄,小 ...