什么是Http无状态?
服务器无法判断两次请求是否是同一个客户端发过来的。
无状态带来的问题
例:第一次请求是添加商品到购物车,第二次请求是结账;如果两次请求服务器无法区分是同一个用户的,那么就会混乱。
会话跟踪技术
客户端第一次发请求给服务器,服务器获取session,获取不到,则创建新的,然后响应给客户端。下次客户端给服务器发送请求,会把sessionID带给服务器,服务器就能获取到,那么服务器就判断这一次请求和上次请求是否为同一客户端,从而区分开。
常用API
request.getSession():获取当前会话,没有则创建新的会话
request.getSession(true):效果和不带参数相同
request.getSession(false):获取当前会话,没有则返回null,不会创建新的
session.getId():获取sessionID
session.idNew():判断当前session是否是新的
session.getMaxInactiveInterval():session的非激活间隔时长,默认1800秒
session.setMaxInactiveInterval()
session.invalidate():强制会话立即失效
......
代码示例
先参考前面文章新建、部署、运行项目。
java类
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class demo01 extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// //获取session,获取不到,获取新的
HttpSession session = request.getSession();
System.out.println("ID:"+session.getId());
}
}
第一次请求时,客户端没有session,会接收到一个服务器端发来的sessionID;
第二次请求时,客户端有session,服务器端则能根据sessionID区分客户端。