学习日常笔记day11cookie及session
1.会话管理
1.1会话管理定义
会话管理:管理浏览器客户端和服务端之间的会话过程中产生的会话数据
域对象:实现资源之间的数据共享
request 域对象
context 域对象
1.2.会话技术
Cookie技术:会话数据保存在浏览器客户端中
Session技术:会话数据保存在服务器端
2.Cookie技术
2.1 特点
Session技术:会话数据保存在服务器端
2.2Cookie技术核心
Cookie类:用于存储会话数据
1)构造Cookie对象
Cookie(java.lang.String name, java.lang.String value);
2)设置Cookie
void setPath(java.lang.String uri) :设置cookie的有效访问路径
void setMaxAge(int expiry) : 设置cookie的有效时间
void setValue(java.lang.String newValue) :设置cookie的值
3)发送cookie到浏览器端保存
void response.addCookie(Cookie cookie) : 发送cookie
4)服务器接收cookie
Cookie[] request.getCookies() : 接收cookie
2.3 Cookie原理
1)服务器创建cookie对象,把会话数据存储到cookie对象中。
new Cookie("name","value");
2) 服务器发送cookie信息到浏览器
response.addCookie(cookie);
举例: set-cookie: name=eric (隐藏发送了一个set-cookie名称的响应头)
3)浏览器得到服务器发送的cookie,然后保存在浏览器端。
4)浏览器在下次访问服务器时,会带着cookie信息
举例: cookie: name=eric (隐藏带着一个叫cookie名称的请求头)
5)服务器接收到浏览器带来的cookie信息
request.getCookies();
2.4 Cookie的细节
1)void setPath(java.lang.String uri) :设置cookie的有效访问路径。有效路径指的是cookie的有效路径保存在哪里,那么浏览器在有效路径下访问服务器时就会带着cookie信息,否则不带cookie信息。
2)void setMaxAge(int expiry) : 设置cookie的有效时间。
正整数:表示cookie数据保存浏览器的缓存目录(硬盘中),数值表示保存的时间。
负整数:表示cookie数据保存浏览器的内存中。浏览器关闭cookie就丢失了!!
零:表示删除同名的cookie数据
3)Cookie数据类型只能保存非中文字符串类型的。可以保存多个cookie,但是浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。
3.Session技术
3.1 引入
Cookie的局限:
1)Cookie只能存字符串类型。不能保存对象
2)只能存非中文。
3)1个Cookie的容量不超过4KB。
如果要保存非字符串,超过4kb内容,只能使用session技术!!!
Session特点:
会话数据保存在服务器端。(内存中)
3.2 Session技术核心
HttpSession类:用于保存会话数据
1)创建或得到session对象
HttpSession getSession()
HttpSession getSession(boolean create)
2)设置session对象
void setMaxInactiveInterval(int interval) : 设置session的有效时间
void invalidate() : 销毁session对象
java.lang.String getId() : 得到session编号
3)保存会话数据到session对象
void setAttribute(java.lang.String name, java.lang.Object value) : 保存数据
java.lang.Object getAttribute(java.lang.String name) : 获取数据
void removeAttribute(java.lang.String name) : 清除数据
3.3 Session原理
问题: 服务器能够识别不同的浏览者!!!
现象:
前提: 在哪个session域对象保存数据,就必须从哪个域对象取出!!!!
浏览器1:(给s1分配一个唯一的标记:s001,把s001发送给浏览器)
1)创建session对象,保存会话数据
HttpSession session = request.getSession(); --保存会话数据 s1
浏览器1 的新窗口(带着s001的标记到服务器查询,s001->s1,返回s1)
1)得到session对象的会话数据
HttpSession session = request.getSession(); --可以取出 s1
新的浏览器1:(没有带s001,不能返回s1)
1)得到session对象的会话数据
HttpSession session = request.getSession(); --不可以取出 s2
浏览器2:(没有带s001,不能返回s1)
1)得到session对象的会话数据
HttpSession session = request.getSession(); --不可以取出 s3
代码解读:HttpSession session = request.getSession();
1)第一次访问创建session对象,给session对象分配一个唯一的ID,叫JSESSIONID
new HttpSession();
2)把JSESSIONID作为Cookie的值发送给浏览器保存
Cookie cookie = new Cookie("JSESSIONID", sessionID);
response.addCookie(cookie);
3)第二次访问的时候,浏览器带着JSESSIONID的cookie访问服务器
4)服务器得到JSESSIONID,在服务器的内存中搜索是否存放对应编号的session对象。
if(找到){
return map.get(sessionID);
}
Map<String,HttpSession>
5)如果找到对应编号的session对象,直接返回该对象
6)如果找不到对应编号的session对象,创建新的session对象,继续走1的流程
结论:通过JSESSION的cookie值在服务器找session对象!!!!!
3.4 Sesson细节
1)java.lang.String getId() : 得到session编号
2)两个getSession方法:
getSession(true) / getSession() : 创建或得到session对象。没有匹配的session编号,自动创 建新的session对象。
getSession(false): 得到session对象。没有匹配的session编号,返回null
3)void setMaxInactiveInterval(int interval) : 设置session的有效时间
session对象销毁时间:
3.1 默认情况30分服务器自动回收
3.2 修改session回收时间
3.3 全局修改session有效时间
<!-- 修改session全局有效时间:分钟 --> <session-config> <session-timeout>1</session-timeout> </session-config>
3.4.手动销毁session对象
void invalidate() : 销毁session对象
4)如何避免浏览器的JSESSIONID的cookie随着浏览器关闭而丢失的问题
手动发送一个硬盘保存的cookie给浏览器 Cookie c = new Cookie("JSESSIONID",session.getId()); c.setMaxAge(60*60); response.addCookie(c);
总结:
1)会话管理: 浏览器和服务器会话过程中的产生的会话数据的管理。
2)Cookie技术:
new Cookie("name","value")
response.addCookie(coookie)
request.getCookies()
3)Session技术
request.getSession();
setAttrbute("name","会话数据");
getAttribute("会话数据")
转载于:https://www.cnblogs.com/liangshandada/p/5451366.html
学习日常笔记day11cookie及session相关推荐
- 学习日常笔记day12jsp基础
1.Jsp基础 1.1Jsp引入 Servlet的作用:用java语言开发动态资源的技术 Jsp的作用:用java语言(+html语言)开发动态资源的技术 jsp就是servlet 1.2Jsp的特点 ...
- python的学习日常笔记 - 字符串
转义字符 转义字符 含义 \\ 反斜杠符号 \' 单引号 \" 双引号 \n 换行 \b 退格 \t 横向制表符 \v 垂直制表符 在字符串前面添加r或R,禁止转义字符的实际意义 print ...
- tensorflow学习函数笔记
为什么80%的码农都做不了架构师?>>> [TensorFlow教程资源](https://my.oschina.net/u/3787228/blog/1794868](htt ...
- Cookie和Session-学习笔记04【Session之验证码案例】
Java后端 学习路线 笔记汇总表[黑马程序员] Cookie和Session-学习笔记01[Cookie_快速入门.Cookie_细节] Cookie和Session-学习笔记02[Cookie案例 ...
- Cookie和Session-学习笔记03【Session快速入门、Session细节】
Java后端 学习路线 笔记汇总表[黑马程序员] Cookie和Session-学习笔记01[Cookie_快速入门.Cookie_细节] Cookie和Session-学习笔记02[Cookie案例 ...
- 深度学习入门笔记系列 ( 二 )——基于 tensorflow 的一些深度学习基础知识
本系列将分为 8 篇 .今天是第二篇 .主要讲讲 TensorFlow 框架的特点和此系列笔记中涉及到的入门概念 . 1.Tensor .Flow .Session .Graphs TensorFlo ...
- .Net 转战 Android 4.4 日常笔记(1)--工具及环境搭建
.Net 转战 Android 4.4 日常笔记(1)--工具及环境搭建 原文:.Net 转战 Android 4.4 日常笔记(1)--工具及环境搭建 闲来没事做,还是想再学习一门新的技术,无论何时 ...
- ipad导入pdf_Ipad笔记法①日常笔记篇
寒假在家快宅坏了--为了不生锈,充实一下自己的生活,我打算把之前想写的东西都写掉,做一个勤勤恳恳的高产写手(期间限定)! 用了一年多的ipad,也尝试了各种各样的笔记软件,下面对自己一年来的ipad和 ...
- ForkJoin 学习使用笔记
2019独角兽企业重金招聘Python工程师标准>>> ForkJoin 学习使用笔记 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若 ...
最新文章
- 干货!整理了50个 Pandas 高频使用技巧,强烈建议收藏!
- 清华学生总结的算法学习方法
- 青龙羊毛——新快手极速版(搬运,非原创)
- 箱形图适用于哪种数据_盘点 | 十分钟进阶Excel数据可视化
- 提高团队整体能力-同一片天“技术交流会”
- 微信小游戏游戏显示html控件,微信小程序中如何渲染html内容(代码示例)
- 区间数值计数(洛谷P1980题题解,Java语言描述)
- “碰瓷”特斯拉翻船,卡车界明星创企Nikola身陷“骗局”危机
- php mysql addslashes_PHP函数 mysql_real_escape_string 与 addslashes 的区别
- react项目案例_教程28——使用 react-rewired 配置基本的环境(项目)
- Storm启动报错Internal Server Error
- PS一键飞溅碎片特效的插件
- WPF使用DialogResult.OK报错
- EMW3239 调试问题汇总
- Altium Designer初学者入门——stm32最小系统的PCB图(接上一篇原理图绘制)
- 消费金融进入“第二赛段”,突围关键是什么?
- (一)Yocto的介绍
- git android pdk,Android源码下载,Syncing work tree: error
- OCR文本检测模型—SegLink
- python基于opencv的人脸检测(有最详细的注释)摄像头实时检测人脸
热门文章
- 图解TCPIP-MIME
- centos rpm
- Pandas timedelta_range
- 编程语言对比 异常处理
- linux chown
- html怎么去li间隙,求助大神 如让图片展示在li标签里面,不要间隙 谢谢
- 一维搜索斐波那契C语言,斐波那契数列在一维搜索中的应用
- mysql公告信息管理系统_JSP班级公告管理系统+mysql 班级公告管理系统 - 下载 - 搜珍网...
- php 获取季度起始日期,php获取昨天、今天、上周、本周、上月、本月、上季度、本季度、今年的起始时间...
- laravel常用命令整理