深入了解 Session 与 Cookie
Java —— 深入了解 Session 与 Cookie
Java
web
了解Cookie和Session
定义
1、很通俗的来讲,Cookie就是浏览器的缓存,就是用户访问网站时保存在浏览器的一小段文本信息。
2、很通俗的来讲,Session就是会话控制,一个会话就是一个浏览器访问该网站的整个过程。Session把关于本次会话的配置信息以及该用户的一些信息保存在服务端。
区别
1、大家都是缓存,Cookie是保存在客户端(浏览器),Session是保存在服务端。
2、Cookie的保存时间自由设定,当超过设定时间时Cookie过期,过期后信息被删除。Session的保存时间也是自由设定,不过一般设定为半个小时,超过设定时间或者会话结束(关闭浏览器)时,该会话对应的Session信息被删除。
3、Cookie有数量和大小的限制,Session没有或者说能支持非常大的数据量。
作用
Session与Cookie的作用都是为了保持访问用户与后端服务器的交互状态。
联系
1、Cookie需要Session
Cookie有着太多的缺点,需要Session来弥补。如数量限制,大小限制,安全性。
2、Session依赖于Cookie
Session保存了所有客户端访问服务端的会话信息,需要Cooekie中保存的JSESSIONID的值与Session中区分客户端的唯一ID对应,来让该客户端的所有访问能找到对应的Session信息。
深入了解Cookie
Cookie的属性项
1、NAME=VALUE:键值对,需要保存的信息写在这
2、Path:Cookie生成的路径
3、Domain:生成该Cookie的域名
4、Expires:过期时间
5、Secure:设置该属性后只会在SSH连接时才会回传该Cookie
例子:
"username=admin;password=000000;JSESSIONID=awi3pd0jf8504n;path=/;Domain=www.baidu.com;expires=Thu Jun 14 2018 01:52:21 GMT+0800"
注意:
1、用Cookie存数据时属性名不可以和Cookie自带的属性名相同
2、属性和值不能设置成非ASSIC字符
Cookie的相关操作
Cookie以字符串的形式保存
1、前端JS操作cookie:
// 读取cookie信息,如需某个属性值转换成数组遍历即可
var cookies=document.cookie;
// 声明一个字符串,字符串中为cookie的信息
var cookie1="username=admin";
// 添加cookie
document.cookie=cookie1;
// 修改cookie,给要改的属性重新赋值
document.cookie="username=linchen";
// 删除cookie,给cookie的过期时间重新赋值为昨天
document.cookie="expires="+(new Date()-1);
2、Java操作cookie:
JDK里javax.servlet.http.Cookie提供了cookie的API
Cookie的安全问题
Cookie就是不安全的!但是我们可以预防!
cookie存储数据一般遵循以下原则:
1、不要保存私人信息。
2、任何重要数据,最好通过加密形式来保存数据(最简单的可以用URLEncode,当然也可以用完善的可逆加密方式,遗憾的是,最好不要用md5来加密)。
3、是否保存登陆信息,需有用户自行选择。
4、长于4K的数据,不要用Cookies。
深入了解Session
Session如何工作
步骤:
- 浏览器访问网站(发起一个会话)
- 解析路径参数拿到seesion id
- 检查Cookie,如果Cookie中有session id,则覆盖之前的
- 运行到request.getSession()拿到该session id
- 根据id到sessions容器中查找已经存在的session对象
- 不存在则新建一个并添加到sessions容器中,存在则找到对应的session对象
- 返回Standard Session 对象
- 根据该对象的id新建一个Cookie,并将这个Cookie设置到Http协议头中
Session 操作
// 获取 Session 对象:
HttpSession session = requiest.getSession();
// 向HttpSession中保存数据;
session.setAttribute();
// 从HttpSession中获取数据;
session.getAttribute();
// 从HttpSession中移除数据;
session.removeAttribute();
// 返回HttpSession的唯一标识符;
session.getId();
// 设置session的存活时间(单位是秒),默认为30分钟;
session.setMaxInactiveInterval();
// 销毁HttpSession
session.invalidate();
※ 提示: (之前有说错)
javax.servlet.http.HttpSession类和javax.servlet.http.Cookie类
的jar包不在jdk里面,而tomcat的lib目录里面有,我们可以选择运行环境为tomcat来使用它们,也可以把这个jar包拷到项目里。
扩展(待以后补充)
分布式Session框架
- 需要一个服务订阅服务器
- ……
Session与Cookie的跨域共享
……
多终端Session统一
……
单点登录
单点登录原理与简单实现:
https://www.cnblogs.com/ywlaker/p/6113927.html
深入了解 Session 与 Cookie的更多相关文章
- 理解Session与Cookie
写在前面的话:Session和Cookie是非常有意思的两个概念,对于两者的管理可以处理的很复杂,但是无论如何,理解Session和Cookie的基本概念和发明初衷,对于问题的解决,大有裨益. === ...
- PHP之session与cookie
1.session与cookie的关系 众所周知,session是存储在服务器端,cookie是存储在客户端,如果禁用了浏览器的cookie功能,很多时候(除非进行了特殊配置)服务器端就无法再读取se ...
- 安全退出,清空Session或Cookie
概览: 网站中点击退出,如果仅仅是重定向到登录/出页面,此时在浏览器地址栏中输入登录后的某个页面地址如主页,你会发现不用登录就能访问.这种所谓的退出并不是安全的. 那么怎样做到安全退出呢? 那就是点击 ...
- 11月7日上午PHP会话控制(session和cookie)、跨页面传值
1.session 登录上一个页面以后,长时间没有操作,刷新页面以后需要重新登录. 特点:(1)session是存储在服务器: (2)session每个人(登陆者)存一份: (3)session ...
- 【荐】PHP Session和Cookie,Session阻塞,Session垃圾回收,Redis共享Session,不推荐Memcached保存Session
什么是 Session 在 web 应用开发中,Session 被称为会话.主要被用于保存某个访问者的数据. 由于 HTTP 无状态的特点,服务端是不会记住客户端的,对服务端来说,每一个请求都是全新的 ...
- Session与Cookie概念
摘:一.Session机制session是一种服务器端的状态管理技术,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息.当程序需要为某个客户端的请求创建一个session的时候,服务 ...
- session和cookie
第一次听到cookie这个词的时候着实兴奋了一段时间,以为是小饼干呢~快喝一杯82年的java压压惊!哈哈~ 与cookie的第一次邂逅——清缓存和清cookie 刚毕业的时候上班,做二次开发,明明后 ...
- 深入理解Session与Cookie
Session与cookie的作用都是为了保持访问用户与后端服务器的交互状态. cookie通过把所有要保存的数据通过HTTP协议的头部从客户端传递到服务端,又从服务端再传回到客户端,所有的数据都存储 ...
- TP中的session和cookie
session:1.session('name','value'); //设置session2.$value = session('name'); // 获取所有的session 3.2.2版本新 ...
- thinkphp里的session、cookie方法
thinkphp里,对于session和cookie的操作,不管是存值.获取.删除,均只有一个方法.现分享出来,供大家参考参考. /** * session管理函数 * @param string|a ...
随机推荐
- Spark Shuffle调优原理和最佳实践
对性能消耗的原理详解 在分布式系统中,数据分布在不同的节点上,每一个节点计算一部份数据,如果不对各个节点上独立的部份进行汇聚的话,我们计算不到最终的结果.我们需要利用分布式来发挥Spark本身并行计算 ...
- t分布, 卡方x分布,F分布
T分布:温良宽厚 本文由“医学统计分析精粹”小编“Hiu”原创完成,文章采用知识共享Attribution-NonCommercial-NoDerivatives 4.0国际许可协议(http://c ...
- Jmeter之Constant Timer与constant throughput timer的区别
当放置Constant Timer于两个http请求之间,那么它代表的含义是:在上一个请求发出至完成后, 开始Contant Timer指定的时间,最后再发出第二个请求.它并不是代表两个请求之间的发送 ...
- VS2010/MFC编程入门之二十三(常用控件:按钮控件的编程实例)
上一节VS2010/MFC编程入门教程中鸡啄米讲了按钮控件Button.Radio Button和Check Box的基本用法,本节就继续讲按钮控件的内容,通过一个实例让大家更清楚按钮控件在实际的软件 ...
- VS2010/MFC编程入门之十八(对话框:字体对话框)
鸡啄米在上一节为大家讲解了文件对话框的使用,本节则主要介绍字体对话框如何应用. 字体对话框的作用是用来选择字体.我们也经常能够见到.MFC使用CFontDialog类封装了字体对话框的所有操作.字体对 ...
- P1131 [ZJOI2007]时态同步(树形dp)
P1131 [ZJOI2007]时态同步 设$f[i]$为与$i$与最远的点的距离 在dfs时每次更新的时候顺便统计一下长度,不同的话就改成最长的那条并更新答案 #include<iostrea ...
- A8逻辑篇1.点亮一个LED(S5PV210.A8)
一.虚拟机安装好后,我们用Fedora 双击.vmx文件,将会在虚拟机中打开 相应的生成: 这些文件 二.进入虚拟机页面 等待启动 账号选择其他 用户名:root 密码:111111 设置页面大小: ...
- NOI导刊2009 提高一
zzh大佬给我说导刊的题全是普及难度,然而我..觉得有两道题是提高的 LocalMaxima 题目解析 对于\(i\)这个数,它要想成为LocalMaxima,比它大的要全部放到最后去,比它小的想怎么 ...
- python 字符串压缩
import zlib s = b'witch which has which witches wrist watch' print(len(s)) t = zlib.compress(s) prin ...
- Qt5窗口标题栏高度
1.frameGeometry().height() - geometry().height() 2. QRect desktopRect = QApplication::desktop()-> ...