Web 开发会话技术 -Session
1.介绍
-
Session 是服务器端技术,服务器在运行时为每一个用户的浏览器创建一个其独享的 session 对象/集合
-
由于 session 为各个用户浏览器独享,所以用户在访问服务器的不同页面时,可以从各自 的 session 中读取/添加数据, 从而完成相应任务
-
Session 可以做什么 :
- 网上商城中的购物车
- 保存登录用户的信息
- 将数据放入到 Session 中
- 供用户在访问不同页面时,实现跨页面访问数据
- 防止用户非法登录到某个页面等等。
2 基本原理
- 当用户打开浏览器,访问某个网站, 操作 session 时,服务器就会在内存(在服务端)为该 浏览器分配一个 session 对象,该 session 对象被这个浏览器独占
- 这个 session 对象也可看做是一个容器/集合,session 对象默认存在时间为 30min
- 你可以把 session 看作是一容器类似 HashMap,有两列(K-V),每一行就是 session 的一 个属性。 每个属性包含有两个部分,一个是该属性的名字(String),另外一个是它的值(Object)
3.常用方法
//1. 创建和获取 Session,API 一样
//第 1 次调用是创建 Session 会话, 之后调用是获取创建好的 Session 对象
HttpSession hs=request.getSession();
//2. 向 session 添加属性name为String val为Object类型
hs.setAttribute(name,val);
//3. 从 session 得到某个属性
Object obj=hs.getAttribute(name);
//4. 从 session 删除调某个属性:
hs.removeAttribute(name);
//5. isNew(); 判断是不是刚创建出来的 Session
//6. 每个 Session 都有 1 个唯一标识 Id 值。通过 getId() 得到 Session 的会话 id 值
4.生命周期
- public void setMaxInactiveInterval(int interval) 设置 Session 的超时时间(以秒为单位), 超过指定的时长,Session 就会被销毁。
- 值为正数的时候,设定 Session 的超时时长。
- 负数表示永不超时
- public int getMaxInactiveInterval()获取 Session 的超时时间
- public void invalidate() 让当前 Session 会话立即无效
- 如果没有调用 setMaxInactiveInterval() 来指定 Session 的生命时长,Tomcat 会以 Session 默认时长为准,Session 默认的超时为 30 分钟
- Session 的生命周期指的是 :客户端/浏览器两次请求最大间隔时长,而不是累积时长。 即当客户端访问了自己的 session,session 的生命周期将从 0 开始重新计算。(指 的是同一个会话两次请求之间的间隔时间)
- 底层: Tomcat 用一个线程来轮询会话状态,如果某个会话的空闲时间超过设定的最大值, 则将该会话销毁