简介
在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。
参考:
https://www.runoob.com/servlet/servlet-session-tracking.html
测试代码
package com.zjw;
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;
@WebServlet(name = "SessionServlet", value = "/ss")
public class SessionServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
session.setMaxInactiveInterval(60*60);//默认1800s 30分钟
System.out.println("---------------------");
System.out.println("id:"+session.getId());
System.out.println("isNew:"+session.isNew());//是否为新的session
System.out.println("creationTime:"+session.getCreationTime());//session创建时间
System.out.println("maxInactiveInterval:"+session.getMaxInactiveInterval());//过期时间
System.out.println("lastAccessedTime:"+session.getLastAccessedTime());//最后访问时间
String user = (String) session.getAttribute("user");
System.out.println(user);
session.setAttribute("user","aaaaa");
}
}
通过浏览器访问,控制台输出结果
//第一次访问
---------------------
id:7B851AF0382BDA8EE0E54DA5BDD4C66B
isNew:true
creationTime:1603892983582
maxInactiveInterval:1800
lastAccessedTime:1603892983582
null
//第二次访问
---------------------
id:7B851AF0382BDA8EE0E54DA5BDD4C66B
isNew:false
creationTime:1603892983582
maxInactiveInterval:1800
lastAccessedTime:1603892983587
aaaaa
浏览器将sessionid以Cookie的方式存储,键为JSESSIONID
.
当第一次请求服务器时,服务器返回
JSESSIONID
,浏览器存储在Cookie中。在下一次请求服务器时(session未失效),将JSESSIONID
发送给服务器。
第一次请求
第二次请求