一、session会话简介
将数据存储在服务器端,并且为这组数据标示一个编号,只将编号发回给客户端。当客户端向服务器发送请求时只需要将这个编号发过来,服务器端按照这个编号找到对应的数据进行管理的这种模式叫做Session——会话。
二、session的特点和作用
session用于存储一次会话的多次请求的数据,存在服务器端;session可以存储任意类型,任意大小的数据。
三、session的实现原理
浏览器第一次访问服务器时,服务器会为该客户端分配一块对象空间,并且使用不同的SID来进行标识,该标识SID会随着响应发回到客户端,且被保存在内存中。当同一个客户端再次发送请求时,标识也会被同时发送到服务器端,而服务器判断要使用哪一个Session对象内的数据时,就会根据客户端发来的这个SID来进行查找。
四、session的功能
package com.wedu.demo.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/**
* session对象
*/
@WebServlet("/sessionDemo")
public class SessionDemo extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//HttpSession getSession():获取session对象
HttpSession session = request.getSession();
//void setAttribute(String name,Object value):存储数据
session.setAttribute("msg", "hello,session");
//Object getAttribute(String name):通过键获取值
String msg = (String) session.getAttribute("msg");
System.out.println(msg);
//void removeAttribute(String name):通过键移除键值对
session.removeAttribute("msg");
msg = (String) session.getAttribute("msg");
System.out.println(msg);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
五、session的注意点
1、session的持久化
当客户端关闭后,服务器不关闭,默认情况下,两次获取session不是同一个,如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存。
Cookie c = new Cookie("JSESSIONID",session.getId());
c.setMaxAge(60*60);
response.addCookie(c);
2、session的活化和钝化
session的钝化:在服务器正常关闭之前,将session对象系列化到硬盘上;
session的活化:在服务器启动后,将session文件转化为内存中的session对象即可。
3、session的销毁
session的销毁的情况有如下三种:
- 服务器关闭,session对象销毁;
- session对象调用invalidate()时,session对象销毁;
- session默认失效时间 30分钟
<!-- 设置Session的有效时间:以分钟为单位 -->
<session-config>
<session-timeout>30</session-timeout>
</session-config>
六、session的应用案例
1、验证码的获取
2、用户登录验证