session简介:
1,因为http是无连接的,每次访问不知道对方是谁。所以引入Session机制来标识访问者。 2,用户第一次访问JSP,Servlet时,为其创建Session。如果是HTML,image等静态资源不会创建。 3,session是存储在服务器端的,和浏览器端无关。你关闭了浏览器,在session有效期内服务器端会一直保留,除非服务端是有销毁代码,将其销毁。 4,session有效期:因为session是留存在客户端内存的,如果访问的用户越来越多,会导致内存溢出的,所以必须设置一个时间自动销毁。 5,根据JSESSIONID,判断当前用户有没有访问过网站
测试代码:
package com.SessionTest;
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;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
@WebServlet("/SessionDemo1")
public class SessionDemo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
HttpSession session = req.getSession();
session.setAttribute("name","zhangsan");
session.setAttribute("age","19");
String id = session.getId();
PrintWriter a = resp.getWriter();
if(session.isNew()){
a.write("是新的"+id);
session.setAttribute("time",new Date());
}else {
a.write("不是新的" + id);
a.write("<br>");
SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String name = (String) session.getAttribute("name");
a.write(name + "," + "您上次访问时间:");
String time = simple.format(session.getAttribute("time"));
session.setAttribute("time",new Date());
a.write(time);
}
a.close();
}
}
创建流程:
当前用户第一次访问时: 上图代码中HttpSession session = req.getSession();这一句的底层实际是根据JSESSIONID判断。因为是第一次访问没有JSESSIONID,所以新建一个session。 并随response返回给客户端。如下图中Set-Cookie即是后端创建返回。 当用户第二次访问时: Cookie中就会携带JSESSIONID。此时后端再执行HttpSession session = req.getSession(); 时,就不需要新创建了。
|