Session技术
原理:
浏览器访问服务器时,
我们可以在服务器中为每一个浏览器创建一个HttpSession对象 !
这个HttpSession对象, 存在一个ID属性 , 我们称其为: JSESSIONID !
服务器会在向客户端响应时, 将JSESSIONID通过Cookie的方式 , 发送给浏览器进行存储 !
当浏览器再次访问服务器时, 服务器会自动获取JSESSIONID ,根据ID寻找到对应的HttpSession对象! , 提供给我们使用!
如何获取HttpSession对象
无参方法: 推荐
HttpSession session = request.getSession();
用来获取一个Session对象, 内部的实现是 调用了一参方法, 传入了true !
一参方法:
HttpSession session = request.getSession(boolean isNew);
参数:
true : 获取一个Session , 如果之前存在 ,则拿来使用 ,如果 不存在则创建一个新的 !
false : 获取一个Session , 如果之前存在, 则拿来使用 , 如果之前不存在, 则返回null;
Session常用方法:
Session 可以用于存取数据, 是键值对的容器 !
设置数据:
session.setAttribute(String key,Object value);
获取数据:
Object value = session.getAttribute(String key);
删除数据:
session.removeAttribute(String key);
销毁Session:
session.invalidate();
如何修改 Session 的 默认存储时长
Session默认在服务器存活的时长为 最后一次请求后30分钟 !
JSESSIONID在浏览器中的存活时长为-1 ,当浏览器关闭时消失 !
方式1.
通过修改tomcat的配置文件 ,来完成 tomcat默认会话时长的修改 !
修改: tomcat安装目录下的conf文件夹下的 web.xml (独立运行环境)
修改: Servers项目下的 web.xml文件 (开发环境)
寻找到session-config节点, 修改子节点session-timeout中的内容, 内容为数字, 表示分钟 !
案例:
<session-config>
<session-timeout>2</session-timeout>
</session-config>
方式2.
单独修改某一个用户的session时长:
通过session对象 调用setMaxInactiveInterval(int 秒);
Session优缺点
优点:
- 安全 , 数据存储在服务器, 不会产生安全性的问题 !
- 能保存任意类型的数据 (Object)
- 存储的大小理论上没有上限 !
缺点:
- 浪费服务器内存空间 , 用户过多时, 极容易耗尽服务器资源 !
Cookie和Session 结合使用
对于安全性不敏感的 字符串数据, 一般建议存储在Cookie中 !
对于安全性较为敏感的数据 一般建议存储在Session中
对于较大的数据 , 存储在数据库 !
Servlet线程安全问题
tomcat在接收到用户新的请求时, 会启动新的线程, 调用对应的Servlet对象的service方法进行处理 !
service方法每一次执行 都处于一个 新的线程中 !
new Thread(){
void run(){
servlet.service(request,response);
}
}.start();