博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Servlet】04-使用Session
阅读量:6641 次
发布时间:2019-06-25

本文共 1469 字,大约阅读时间需要 4 分钟。

如果,我们需要保留用户的状态信息,则可以尝试使用Session(HTTP是无状态的嘛!)

假设我们有如下场景:

-Hey,Siri!

-我有什么可以帮你的?
-给我讲一个冷笑话。
-好的,blahblah。
-再来一个。
-对不起,我没听懂你在说什么。

如何让Siri能够上下文联想呢?Session机制这时候就很有用,Session机制提供的是:

  • 同一用户

  • 同一Session

  • 不同请求

  • 不同线程

Session是这样开始工作的:

客户端->服务器:发送一个请求服务器->客户端:设置Cookie/唯一的SessionID客户端->服务器:再次请求+上次的Cookie

容器为我们做了绝大多部分工作:

  • 创建会话

  • 生成SessionID(向客户端设置set-cookie首部)

  • ID与会话匹配

我们唯一需要做的事就是:

// 这行代码不创建SessionHttpSession session = request.getSession(false);if (session == null) {    session = request.getSession();}

如果我们恰巧禁用了Cookie,我们需要使用URL重写技术

// 向someurl增加额外的会话IDresponse.encodeURL(someurl);

会话的技术问题解决了,但是为了服务器的负担问题,我们不可能一直在服务器端保留用户的会话信息,会话存活问题也就需要解决。

我们查看HttpSession的API之后,有如下列表:

方法名 返回结果 作用
getCreateTime() 创建时间的毫秒 获取Session的创建时间
getLastAccessedTime() 上次访问时间的毫秒 同左
setMaxInactiveInterval() X 设置session存活时间,单位为秒
invalidate() X session失效

P.S. 我们可以在DD中设置Session的存活时间:

作为客户端验证的工具Cookie,我们有如下方法:

方法名 返回结果 作用
getCookies() 获取所有的Cookie 同左
setMaxAge() 设置Cookie的优秀时间,单位为秒数 X
addCookie() 设置一个Cookie 同左

下面,我们来探讨一下分布式应用中的Session问题。

我们知道的是,对于一个分布式应用,每个VM的Servlet有一个ServletContext,有一个ServletConfig。对于一次会话,只有一个HttpSession对象。然后,我们就有了会话迁移技术:

Web容器为了负载均衡,将HttpSession迁移到其它VM的技术。

和会话有关的接口如下所示:

HttpSessionListener --> SessionListener

类名 作用 实现类
HttpSessionListener 查看并发用户 其它类
HttpSessionBindingListener 查看实现该接口的类被绑定到会话的情况 属性类
HttpSessionAttributeListener 查看会话中属性的增删改情况 其它类
HttpSessionActivationListener 会话迁移到其它VM的情况 X

P.S. 和Session有关的事件监听器只有 HttpSessionAttributeEvent和HttpSessionBindingEvent

转载地址:http://xoovo.baihongyu.com/

你可能感兴趣的文章
P2341 [HAOI2006]受欢迎的牛
查看>>
android mvp设计模式
查看>>
第1章 算法在计算中的作用
查看>>
IBM Minus One
查看>>
unity3d之切换场景不销毁物体
查看>>
window的cmd使用
查看>>
在TextView上加上下划线或中划线
查看>>
servlet 请求(Request)
查看>>
进程池的回调函数callback
查看>>
Ceph 初识
查看>>
React文档(十一)提升state
查看>>
【BZOJ3160】 万径人踪灭(FFT,manacher)
查看>>
不一样的网络流系列——Dinic跑得快
查看>>
TCP连接的建立与终止
查看>>
spring cloud学习(三) 断路器
查看>>
5、把函数当做参数传递给另一个函数,而且可将一个函数作为另一个函数的结果返回...
查看>>
[原译]ListView布局管理器
查看>>
Android硬件抽象层(HAL)概要介绍和学习计划
查看>>
电驴提示“该内容尚未提供权利证明,无法提供下载”之解决办法详解,极力推荐...
查看>>
vue项目中定时器的管理
查看>>