会话跟踪技术介绍总结

会话跟踪技术在我当前学习,分为Session和Cookie两种会话技术。

简单来看,一次会话,就像是一次人与人之间的通话一样,只不过会话是浏览器和服务器之间的“通话”。

我们都知道,现在任何“通话”都是基于HTTP协议的,但是呢,HTTP协议是无状态的。何为无状态?简单来理解就是没有记忆能力的。浏览器一次会话中,每次新的请求对于服务器来说都是新的,那这肯定不行吧?所以说,就有了Cookie和Session的出现。Cookie和Session就是为了解决HTTP无状态的问题,让同一次会话的多次请求间可以共享数据。

关于Cookie
Cookie的数据是存储在浏览器这边的,所以说,cookie也叫做浏览器端会话技术。
具体原理:
1) 服务器创建cookie对象,把会话数据存储到cookie对象中
2) 服务器发送cookie信息到浏览器。set-cookie:name=eric
3) 浏览器得到服务器发送的cookie,然后保存在浏览器端。
4) 浏览器在下次访问服务器时,会带着cookie信息。cookie: name=eric
5) 服务器接收到浏览器带来的cookie信息

具体使用:
1,创建cookie对象,设置数据。

Cookie cookie = new Cookie("key","value");

2,发送Cookie到客户端:使用response对象

response.addCookie(cookie);

3,获取客户端携带的所有Cookie,使用request对象
Cookie[] cookies = request.getCookies()(因为cookie可能不是一个,所以使用一个Cookie数组去接收)
4,遍历数组得到每一个cookie对象
5,得到Cookie的名字:cookie.getName();得到对应的值:cookie.getValue()

注意事项:
①、Cookie是有存活时间的。
默认情况下,Cookie存储在浏览器中,当浏览器关闭,Cookie则被销毁了。如果想要设置存活时间,则需要调用方法setMaxAge(int seconds):设置Cookie存活时间

正数将 Cookie写入浏览器所在电脑的硬盘,持久化存储。到时间自动删除
负数默认值,Cookie在当前浏览器内存中,当浏览器关闭,则 Cookie被销毁
删除对应 Cookie

②、Cookie存储中文问题
Tomcat8是可以存储中文的,但是不能存储一些Cookie不允许的符号
Tomcat7及以下是不允许存储中文。
解决方案:URL编解码

content = URLEncoder.encode(content,"UTF_8");
value = URLDecoder.decode(value,"UTF-8");

关于Session
Session是在服务端的会话技术,和Cookie是相反的,但是底层是基于Cookie的。
Session原理:下面放一张去医院 就诊复诊 的图片,这最能解释Session底层的原理。
在这里插入图片描述
用官方的描述如下(配合上图食用):

1,第一次访问创建Session对象,给Session对象分配一个唯一的ID,叫做JSESSIONID
2,把JSESSIONID作为Cookie的值发送给浏览器保存
3,当第二次访问的时候,浏览器带着JSESSIONID的Cookie访问服务器
4,服务器得到JSESSIONID,在服务器内存中搜索是否存放对应编号的Session对象
5,如果找到对应编号的对象,那么直接返回该对象
6,如果找不到,就创建一个新的Session对象,继续走按照流程走。

总结一句话就是:通过JSESSIONID的Cookie值在服务器找Session对象

注意事项:
默认情况下无操作,30分钟自动销毁Session,若想修改时间,可以在项目的web.xml文件中添加下列代码,去修改:

<session-config>
    <session-timeout>30</session-timeout>
</session-config>

当然也可以调用Session对象的invalidate方法,进行手动销毁。

最后简单总结一下Session和Cookie的区别:

  1. Cookie存储在浏览器,Session存储在服务端
  2. Cookie不安全,Session安全
  3. Cookie最大3KB(也有说4KB的),但是Session无大小限制
  4. Cookie可以长期存储,但是Session默认是30分钟
  5. Cookie不占服务器资源,Session占用服务器资源
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值