Visão geral da sessão
- (1) O que é sessão? A
tecnologia de sessão é para acessar os dados da sessão no lado do servidor - (2) Quais são as características?
O acesso aos
dados de valor-chave tem um tempo de sobrevivência
, o jsessionId de cada sessão é diferente
Princípio da Sessão
Princípio:
1 "O servidor atribui um objeto chamado sessão ao navegador
2" Cada sessão tem um id e pode armazenar o valor-chave
3 "Para que cada navegador acesse seus próprios dados sem ser afetado por outros, a sessão deve ter um jessionId
Dados de acesso à sessão
- (1) Obter Sessão
HttpSession getSession () Obter objeto de sessão - (2) Salvar dados
setAttribute (chave, valor) - (3) Ler dados
getAttribute (chave)
src \ com \ wzx \ pack01_set \ Demo01SetServlet.java
salvar dados
@WebServlet("/set")
public class Demo01SetServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//访问服务器,服务器为每个浏览器分配一个 session,有自己的id
//1 获取session对象
HttpSession session = request.getSession();
//2 获取session的编号jsessionId
String jsessionId = session.getId();
response.getWriter().println(jsessionId);
//3 保存key-value
session.setAttribute("name","jack");
session.setAttribute("age","20");
}
}
src \ com \ wzx \ pack01_set \ Demo02GetServlet.java
@WebServlet("/get")
public class Demo02GetServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1 获取session对象
HttpSession session = request.getSession();
//2 获取key对应的value
String name = (String) session.getAttribute("name");
String age = (String) session.getAttribute("age");
System.out.println(name);
System.out.println(age);
}
}
Use o cookie para salvar o ID da sessão
src \ com \ wzx \ pack02_session_persister \ Demo03SetServlet.java
-
Cada vez que você fecha o navegador e acessa o projeto, o servidor atribuirá um novo sessionId.
Se você fechar o navegador e reiniciá-lo,
será necessário acessar os dados da sessão anterior . Use cookies para salvar o sessionId no navegador. O sessionid será colocado automaticamente no cabeçalho da requisição ao acessar o projeto. -
getSession () primeiro descobre se há uma sessão antes de acordo com jsessionId, se houver, reutilize a sessão, caso contrário, crie uma nova.
-
Cookie cookie = new Cookie("JSESSIONID",jsessionId); 参数名必须是JSESSIONID
@WebServlet("/set_jsessionId")
public class Demo03SetServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//打开浏览器,向服务器发一个jsessionID,让服务器根据jsessionID打开之前的session
//取里面的数据,得使用技术保存jsessionID在浏览器 Cookie
//1 获取session对象
HttpSession session = request.getSession();
//2 获取session的编号jsessionId
String jsessionId = session.getId();
//3 保存key-value
session.setAttribute("name","jack");
session.setAttribute("age","20");
response.getWriter().println(jsessionId);
Cookie cookie = new Cookie("JSESSIONID",jsessionId);
//存活时间
cookie.setMaxAge(10*60);
//项目地址
cookie.setPath(request.getContextPath());
response.addCookie(cookie);
}
}
Invalidação de sessão
session.invalidate (); // Deixar a sessão falhar, os dados originais se foram
@WebServlet("/clear")
public class Demo04SetServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//invalidate()清除失效
HttpSession session = request.getSession();
session.invalidate();
}
}
Passivação e ativação da Sessão (entender)
- Fechar o serviço no tomcat fará automaticamente a persistência da sessão, também chamada de passivação, e vice-versa, ativação
- Este é um session.ser que armazena os dados da sessão no diretório de trabalho
- Amigos que usam idéia para publicar o projeto verificar o console log e encontrar o diretório de trabalho.
Meus arquivos são os seguintes