1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-20 22:17:09 +08:00

Update J2EE基础知识.md

This commit is contained in:
SnailClimb 2019-05-19 11:07:15 +08:00
parent 2b2187891c
commit 1c2735839a

View File

@ -294,12 +294,10 @@ if(cookies !=null){
在所有会话跟踪技术中HttpSession对象是最强大也是功能最多的。当一个用户第一次访问某个网站时会自动创建 HttpSession每个用户可以访问他自己的HttpSession。可以通过HttpServletRequest对象的getSession方 法获得HttpSession通过HttpSession的setAttribute方法可以将一个值放在HttpSession中通过调用 HttpSession对象的getAttribute方法同时传入属性名就可以获取保存在HttpSession中的对象。与上面三种方式不同的 是HttpSession放在服务器的内存中因此不要将过大的对象放在里面即使目前的Servlet容器可以在内存将满时将HttpSession 中的对象移到其他存储设备中但是这样势必影响性能。添加到HttpSession中的值可以是任意Java对象这个对象最好实现了 Serializable接口这样Servlet容器在必要的时候可以将其序列化到文件中否则在序列化时就会出现异常。
## Cookie和Session的的区别
1. 由于HTTP协议是无状态的协议所以服务端需要记录用户的状态时就需要用某种机制来识具体的用户这个机制就是Session.典型的场景比如购物车当你点击下单按钮时由于HTTP协议无状态所以并不知道是哪个用户操作的所以服务端要为特定的用户创建了特定的Session用用于标识这个用户并且跟踪用户这样才知道购物车里面有几本书。这个Session是保存在服务端的有一个唯一标识。在服务端保存Session的方法很多内存、数据库、文件都有。集群的时候也要考虑Session的转移在大型的网站一般会有专门的Session服务器集群用来保存用户会话这个时候 Session 信息都是放在内存的使用一些缓存服务比如Memcached之类的来放 Session。
2. 思考一下服务端如何识别特定的客户这个时候Cookie就登场了。每次HTTP请求的时候客户端都会发送相应的Cookie信息到服务端。实际上大多数的应用都是用 Cookie 来实现Session跟踪的第一次创建Session的时候服务端会在HTTP协议中告诉客户端需要在 Cookie 里面记录一个Session ID以后每次请求把这个会话ID发送到服务器我就知道你是谁了。有人问如果客户端的浏览器禁用了 Cookie 怎么办一般这种情况下会使用一种叫做URL重写的技术来进行会话跟踪即每次HTTP交互URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。
3. Cookie其实还可以用在一些方便用户的场景下设想你某次登陆过一个网站下次登录的时候不想再次输入账号了怎么办这个信息可以写到Cookie里面访问网站的时候网站页面的脚本可以读取这个信息就自动帮你把用户名给填了能够方便一下用户。这也是Cookie名称的由来给用户的一点甜头。所以总结一下Session是在服务端保存的一个数据结构用来跟踪用户的状态这个数据可以保存在集群、数据库、文件中Cookie是客户端保存用户信息的一种机制用来记录用户的一些信息也是实现Session的一种方式。
Cookie 和 Session都是用来跟踪浏览器用户身份的会话方式但是两者的应用场景不太一样。
参考:
**Cookie 一般用来保存用户信息** 比如①我们在 Cookie 中保存已经登录过得用户信息,下次访问网站的时候页面可以自动帮你登录的一些基本信息给填了;②一般的网站都会有保持登录也就是说下次你再访问网站的时候就不需要重新登录了,这是因为用户登录的时候我们可以存放了一个 Token 在 Cookie 中,下次登录的时候只需要根据 Token 值来查找用户即可(为了安全考虑,重新登录一般要将 Token 重写);③登录一次网站后访问网站其他页面不需要重新登录。**Session 的主要作用就是通过服务端记录用户的状态。** 典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。服务端给特定的用户创建特定的 Session 之后就可以标识这个用户并且跟踪这个用户了。
https://www.zhihu.com/question/19786827/answer/28752144
Cookie 数据保存在客户端(浏览器端)Session 数据保存在服务器端。
《javaweb整合开发王者归来》P158 Cookie和Session的比较
Cookie 存储在客户端中而Session存储在服务器上相对来说 Session 安全性更高。如果使用 Cookie 的一些敏感信息不要写入 Cookie 中,最好能将 Cookie 信息加密然后使用到的时候再去服务器端解密。