2021-03-07

常用状态跟踪

1,为什么要用状态跟踪?
http协议是一种无状态协议,当请求/响应结束后,连接会断开,这样,服务器会认为每次请求的用户是新用户,无法判断两次请求的用户是否为同一个用户。

2,常用状态跟踪方式
1,隐藏表单
在客户端表单中添加隐藏表单,在隐藏表单中,提交代表该客户的唯一标识。服务器在两次得到用户唯一标识时,发现两次的唯一标识一致,就认为是同一个用户。
但此方法有明显的缺点:
1,不同客户的唯一标识需要开发者生成,在服务器端也需要开发者对不同的用户进行身份识别。
2,在客户端的每个网页中都需要添加代表身份的唯一标识,实现比较繁琐。

2,cookie
客户端请求服务器,服务器发送cookie信息给客户端。在产生响应时,会产生Set-cookie响应头,再该响应头中,以键值对方式描述cookie信息。响应信息到达客户端以后,会将cookie信息存储在客户端。当客户端再次发送请求时,会将之前服务器发送给客户端的cookie信息,在以cookie请求头方式发送给服务器。服务器得到的信息和发送的信息是一致的,就认为是同一用户。
使用cookie的优点:
在同一个网站中,可以在用户访问不同资源时,都可以将cookie信息发送给服务器。cookie信息存放在客户端浏览器缓存中,只要浏览器不关闭,客户端可以一直将cookie信息发送给服务器。cookie信息如果设置了过期时间,就会以文件方式存放在客户端,在过期时间以内,客户端可以一直将cookie信息发送给服务器。
使用cookie的缺点:
1,代表不同用户的唯一标识,同样由开发者编写,服务器也需要进行不同身份的识别。
2,cookie信息存放在客户端,容易引起安全隐患。

3,session
客户端访问服务器,服务器为了跟踪该用户的信息,为该用户产生一个session对象,同时为该session对象产生一个唯一标识sessionId。为了管理众多用户的session信息,以sessionId为键,以session对象为值,将session信息存放在Map集合中。在产生响应时,服务器将sessionId以Set-cookie响应头的方式发送给客户端。客户端再请求服务器时,会将sessionId再以Cookie请求头的方式发送给服务器。服务器得到sessionId后,从map集合中,取出session对象,从而跟踪状态。
缺点:
http协议是无状态协议,当用户关闭浏览器下线时,服务器并不清楚,因而还会保留分配给该用户的session对象。所以,关闭浏览器,并不意味着session对象的销毁。如果不及时清理这种过期的session对象,服务器的内存会持续的占用。持续的消耗,最终导致服务器崩溃。

4,URL重写
由于cookie会引起一些安全隐患,所以有些用户为了安全,会在浏览器中禁用cookie。这样,当服务器发送以cookie方式发送session到客户端时,客户端无法保存该sessionId。当客户端再次请求服务器时,由于没有session提交服务器,服务器就会认为是新用户,会重新分配新的session对象。这样,无法跟踪客户端的状态。那么怎么办呢?这时我们就可以使用URL重写方式。
采用URL重写的方式,URL重写是在请求的URL路径后,添加sessionId,这样sessionId就不是以cookie方式发送给服务器的,所以,客户端即使禁用cookie,同时可以将session发送给服务器,服务器也能跟踪到客户端的状态。

5,token
由于cookie会引起安全隐患,除了使用URL重写以外,我们还可以使用token进行状态跟踪。
用户发出登录请求,带着用户名和密码到服务器经行验证,服务器验证成功就在后台生成一个token返回给客户端。客户端将token存储到cookie中,服务端将token存储到redis中,可以设置存储token的有效期。后续客户端的每次请求资源都必须携带token,这里放在请求头中,服务端接收到请求首先校验是否携带token,以及token是否和redis中的匹配,若不存在或不匹配直接拦截返回错误信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值