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 会帮你在网站上所打的文字或是一些选择, 都纪 ...
随机推荐
- 带你实现开发者头条APP(三) 首页实现
title: 带你实现开发者头条APP(三) 首页实现 tags: 轮播广告,ViewPager切换,圆形图片 grammar_cjkRuby: true --- 一.前言 今天实现开发者头条APP的 ...
- iOS审核这些坑,腾讯游戏也踩过
作者:Jamie,专项技术测试工程师,在iOS预审和ASO优化领域从事专项测试相关工作,为腾讯游戏近100个产品提供专项服务. WeTest 导读 在App上架苹果应用商店的过程中,相信大多数iOS开 ...
- WebGIS项目中利用mysql控制点库进行千万条数据坐标转换时的分表分区优化方案
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 项目中有1000万条历史案卷,为某地方坐标系数据,我们的真实 ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- Javascript高性能编程-提高Dom访问速度
在浏览器中对于Dom的操作和普通的脚本的操作处于两个不同的dll中,两个dll的交互是比较耗时的,优化对Dom的操作可以提高脚本的执行速度.下面是对如何优化的一些总结: 将需要多次操作的节点存储在一个 ...
- 《MySQL必知必会》学习笔记
数据库:数据库是一种以某种有组织的方式存储的数据集合.其本质就是一个容器,通常是一个或者一组文件. 表:表示一种结构化的文件,可用来存储某种特定类型的数据. 模式:描述数据库中特定的表以及整个数据库和 ...
- TCP服务和首部知识点小结
服务 应用程序会被TCP分割成数据段,而UDP不分割. TCP有超时重传和确认 如果检验和出错将丢弃 IP数据包可能会失序或者重复,所以TCP会处理 滑动窗口来进行流量控制 对字节流的内容不做任何解释 ...
- Forward+ Rendering Framework
近几天啃各种新技术时又一个蛋疼的副产品...额,算是把AMD的Forward+ Sample抄了一遍吧. 其实个人感觉这个AMD大肆宣传的Forward+跟Intel很早之前提的Tiled-Based ...
- python 常用第三方模块
除了内建的模块外,Python还有大量的第三方模块. 基本上,所有的第三方模块都会在https://pypi.python.org/pypi上注册,只要找到对应的模块名字,即可用pip安装. 本章介绍 ...
- mono for android 获取手机照片或拍照并裁剪保存
axml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android ...