深入理解session和Cookie

Session和Cookie的作用都是为了保持访问用户与后端服务器的交互状态。

10.1 深入理解Cookie

Cookie是一个用户通过HTTP访问一个服务器这个服务器会将一些key/value键值对返回给客户端浏览器,并加上一些限制条件,当条件符合时用户下次访问服务器时,数据又被完整待会服务器。

为了解决http是无状态的协议的问题,让服务器识别两次访问是同一个用户。

如果设置了version1中的配置项,即使没有配置版本号,tomcat在最后构建http响应头的时候也会自动将版本号设置为1。

对cookie的构建是通过org.apache.catalina.connector.Response类完成的。

注意:

创建Cookie的Name不能和set-Cookie中属性名称相同,否则抛出IllegalArgumentException

Name和Value不能设置成非ASIC字符,如果要使用中文,需要通过URLEncoder将其编码

Name和Value出现TOKEN字符(“\”“、“”,“等)version自动设置为1

当该Cookie属性想中出现Version为1的属性项时,构建HTTP响应头同样会将Version设置为1

 

10.2 深入理解Session

Session是为了防止Cookie太多占用网络流量的问题解决的。

客户端在访问服务器的时候生成唯一的一个sessionId通常是Name=JSESSIONID的Cookie,之后登陆只用返回这一个Cookie即可。

session如何工作

 

当servlet重启或者关闭时,StandardManager负责持久化没有过期的StandardSession,将其持久化到一个SESSIONS.ser的文件中,当servlet容器重启的时候将其恢复。

 

检查session过期的两种形式:

(1)Tomcat后台线程中超过60s即判定为过期

(2)调用request.getSession()方法时,也会检查,但如果过期会创建新的StandardSession对象。

 

 

Cookie和Session对比:

(1)cookie数据存放在客户的浏览器上,session数据放在服务器上。

(2)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗

   考虑到安全应当使用session。

(3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能

   考虑到减轻服务器性能方面,应当使用COOKIE。

(4)单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

 

10.3 分布式session框架

Cookie存在安全性和带宽的缺点,但能解决多机访问的问题。为了克服这样的缺点采用分布式session框架解决了session无法多机访问的缺点。

思路:采用服务订阅服务器,从订阅服务器订阅可写的session和可写的cookie。能够精准的控制哪些应用可以操作哪些Session和Cookie,能有效控制session的安全性和Cookie的数量。

 

订阅服务器可以有效的管理资源,省去了每个应用都配置Cookie。如果需要统一到订阅服务器申请。

 

分布式框架如何存取session和Cookie

思路:利用tomcat中的filter在request到达MVC之前,根据sessionId获取用户信息设置到request和response中,然后更新到分布式缓存中。

 

 

跨域名同步session

思路:在a域名登陆过之后,访问b域名的时候,如果sessionId为空则302跳转到a域名获得sessionId并写入到b域名下面,之后再跳转回b域名。

 

表单重复提交问题

思路:每次请求的时候服务端生成一个随机数返回给客户端,每次提交的时候做一个比较,如果一致,则为成功的一次提交,并删除token,如果不等代表重复提交。

也可以在提交按钮上做一个定时器。

 

PC/移动多终端session统一

(1)多端共享session

要求:

两端的服务器会员数据结构、session、cookie统一

(2)多终端登陆(扫码登陆)

手机端已经登陆,二维码中标志这该客户端已经通过手机登陆,扫码之后客户端给服务端置位,前端网页不断请求服务器标志位,然后跳转。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值