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如何工作

步骤:

  1. 浏览器访问网站(发起一个会话)
  2. 解析路径参数拿到seesion id
  3. 检查Cookie,如果Cookie中有session id,则覆盖之前的
  4. 运行到request.getSession()拿到该session id
  5. 根据id到sessions容器中查找已经存在的session对象
  6. 不存在则新建一个并添加到sessions容器中,存在则找到对应的session对象
  7. 返回Standard Session 对象
  8. 根据该对象的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框架

  1. 需要一个服务订阅服务器
  2. ……
 

Session与Cookie的跨域共享

……

 

多终端Session统一

……

 

单点登录

单点登录原理与简单实现: 
https://www.cnblogs.com/ywlaker/p/6113927.html

深入了解 Session 与 Cookie的更多相关文章

  1. 理解Session与Cookie

    写在前面的话:Session和Cookie是非常有意思的两个概念,对于两者的管理可以处理的很复杂,但是无论如何,理解Session和Cookie的基本概念和发明初衷,对于问题的解决,大有裨益. === ...

  2. PHP之session与cookie

    1.session与cookie的关系 众所周知,session是存储在服务器端,cookie是存储在客户端,如果禁用了浏览器的cookie功能,很多时候(除非进行了特殊配置)服务器端就无法再读取se ...

  3. 安全退出,清空Session或Cookie

    概览: 网站中点击退出,如果仅仅是重定向到登录/出页面,此时在浏览器地址栏中输入登录后的某个页面地址如主页,你会发现不用登录就能访问.这种所谓的退出并不是安全的. 那么怎样做到安全退出呢? 那就是点击 ...

  4. 11月7日上午PHP会话控制(session和cookie)、跨页面传值

    1.session  登录上一个页面以后,长时间没有操作,刷新页面以后需要重新登录. 特点:(1)session是存储在服务器:   (2)session每个人(登陆者)存一份: (3)session ...

  5. 【荐】PHP Session和Cookie,Session阻塞,Session垃圾回收,Redis共享Session,不推荐Memcached保存Session

    什么是 Session 在 web 应用开发中,Session 被称为会话.主要被用于保存某个访问者的数据. 由于 HTTP 无状态的特点,服务端是不会记住客户端的,对服务端来说,每一个请求都是全新的 ...

  6. Session与Cookie概念

    摘:一.Session机制session是一种服务器端的状态管理技术,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息.当程序需要为某个客户端的请求创建一个session的时候,服务 ...

  7. session和cookie

    第一次听到cookie这个词的时候着实兴奋了一段时间,以为是小饼干呢~快喝一杯82年的java压压惊!哈哈~ 与cookie的第一次邂逅——清缓存和清cookie 刚毕业的时候上班,做二次开发,明明后 ...

  8. 深入理解Session与Cookie

    Session与cookie的作用都是为了保持访问用户与后端服务器的交互状态. cookie通过把所有要保存的数据通过HTTP协议的头部从客户端传递到服务端,又从服务端再传回到客户端,所有的数据都存储 ...

  9. TP中的session和cookie

    session:1.session('name','value');  //设置session2.$value = session('name');  // 获取所有的session 3.2.2版本新 ...

  10. thinkphp里的session、cookie方法

    thinkphp里,对于session和cookie的操作,不管是存值.获取.删除,均只有一个方法.现分享出来,供大家参考参考. /** * session管理函数 * @param string|a ...

随机推荐

  1. 谷歌百度以图搜图 "感知哈希算法" C#简单实现

    /// <summary> /// 感知哈希算法 /// </summary> public class ImageComparer { /// <summary> ...

  2. EF Code First 学习笔记:表映射(转)

      多个实体映射到一张表 Code First允许将多个实体映射到同一张表上,实体必须遵循如下规则: 实体必须是一对一关系 实体必须共享一个公共键 观察下面两个实体: public class Per ...

  3. Android开发--取消AsyncTask

    在Android应用开发过程中,为了防止UI线程堵塞,耗时的工作都应该另起一个后台线程来完成,其中AsyncTask就是其中的一种方式.最近在案子中需要“停止/取消”某个AsyncTask,在网上查了 ...

  4. Android 创建SQLite数据库(一)

    Android内置了轻量级的数据库SQLite,这里将自己理解作个记录,方便自己复习. 一.首先,创建SQLite数据库比较常见的方式是通过Android提供的SQLiteOpenHelper来实现, ...

  5. Python3.6(windows系统)安装pip.whl

    Python3.6(windows系统)安装pip.whl 1,下载whl文件:https://pypi.python.org/pypi/pip#downloads 2,将下载的文件放入Python的 ...

  6. UVaLive4992:Jungle Outpost

    传送门 半平面交. 首先,由显然成立法可以证明炸连续的几个总比分散火力效果更佳. 所以二分答案,转化为判定问题,即间隔$ans$个点的连线的半平面交是否为空. 半平面交判定即可. 时间复杂度:$O(N ...

  7. jQuery Mobile中的页面加载与跳转机制

    第一次做用jQuery Mobile做东西,发现一些跟平时的思维习惯不太一样的.其中这个框架的页面加载机制便是其中一个.如果不明白其中的奥秘,往往会出现一些让人摸不着头脑的怪现象,比如页面进入后点击按 ...

  8. [UI基础][实现]九宫格之应用程序管理

    [目标] 1.完成下图所示的View,View中的图片.文字数据从app.list文件读出. 2.思考代码哪里可以进行优化. [分析] 1.创建控件 整个View分12个部分,其中包含一个 UIIma ...

  9. [UI基础][不会说话的汤姆猫]

    会说话的汤姆猫这个APP层级风靡一时,其UI部分就是利用了序列动画的技术, 接下来 我们用汤姆猫来演示怎么制作序列动画. [要求]: 1.学会使用序列动画的方法 2.学会分析动画播放中内存占用高的问题 ...

  10. sqlite的bool字段

    简直被坑死了, bool字段更新,只能用0或1,才是正确的更新. 否则select出来的字段是错的 本来用true和false更新的,更新之后,使用sqliteexpert查看,更新结果是对的. 但是 ...