概述:
Session,也叫会话,是用于记录用户状态。指的是在一段时间内,单个客户端与服务器的一连串交互过程。
在一个Session中,客户可能会多次访问同一个资源,也有可能请求访问各种不同的服务器资源。
原理:
- 服务器会给每一次会话分配一个session对象
- 同一个浏览器发起的多次请求,属于同一次会话(Session)
- 首次使用到Session时,服务器会自动创建一个Session,并创建cookie存储sessionId发送回客户端,所以Session是由服务器创建的
使用:
- Session的作用域:拥有存储数据的空间,作用范围是一次会话有效
- 一次会话是使用同一个浏览器发送多次请求,一旦浏览器关闭,会话结束
- 可以将数据存到session中,在一次会话的任意位置都可以进行获取
- 可传递任何数据(基本数据类型、对象、集合、数组)
session的获取:
//session的获取
HttpSession session = req.getSession();
String id = session.getId();//session的唯一标识
session保存数据
session.setAttribute( "key",value);//键值对形式存储数据
session获取数据:
Object key = session.getAttribute( "key" );//获取键为key的value值
session移出数据:
session.removeAttribute( "key" );//移出session作用域中键为key的value值
部分代码实例:
@WebServlet(name = "SessionServlet",value = "/rj")
public class SessionServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//通过request对象获取session对象
HttpSession session = req.getSession();
//获取session唯一标识
String id = session.getId();
Object key = session.getAttribute( "key" );//获取键为key的value值
session.removeAttribute( "key" );//移出键为key的value值
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet( req,resp );
}
}
-
生命周期
开始:第一次使用到Session的请求,则创建Session
结束:
- 浏览器关闭,失效
- Session超时,则失效
- session.setMaxlnactivelnterval(秒数);//设置最大有效时间
- 手工销毁
- session.invalidate();登录退出,注销
- Session超时,则失效
@WebServlet(name = "GetSessionServlet",value = "/get")
public class GetSessionServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
session.setMaxInactiveInterval( 10 );
System.out.println(session.getId());
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet( req,resp );
}
}
- 手工销毁
@WebServlet(name = "LifeSessionServlet",value = "/life")
public class LifeSessionServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
System.out.println(session.getId());
session.invalidate();//立即失效,之后拿到的就是新的sessionId了
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet( req, resp );
}
}
如有不对之处,感谢指正!!!!
如有不对之处,感谢指正!!!!
如有不对之处,感谢指正!!!!