Em ciência da computação, uma sessão é um intercâmbio semipermanente de informações interativas, também conhecido como um diálogo, uma conversa ou uma reunião, entre dois ou mais dispositivos de comunicação, ou entre um computador e usuário. Uma sessão HTTP é uma sequência de transações de rede de requisição-resposta e se dá da seguinte forma, um cliente HTTP inicia uma requisição estabelecendo uma conexão Transmission Control Protocol (TCP) para uma porta particular de um servidor. Um servidor HTTP ouvindo naquela porta espera por uma mensagem de requisição de cliente. Recebendo a requisição, o servidor retorna uma linha de estado, como “HTTP/1.1 200 OK“, e uma mensagem particular própria. O corpo desta mensagem normalmente é o recurso solicitado, apesar de uma mensagem de erro ou outra informação também poder ser retornada.
Um identificador de sessão, ID da sessão ou token de sessão é um pedaço de dados que é usado em comunicações de rede para identificar uma sessão, uma série de trocas de mensagens relacionadas. As sessões são identificadas por único identificador (ID) no qual é associado aos dados criados no servidor, este identificador é gerado aleatoriamente e de difícil falsificação. O rastreamento de sessões é efetuado por padrão através de cookies.
HTTP Session: https://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpSession.html
Utilizando Cookies e Sessions
1 – Crie um novo projeto web dinâmico e crie um novo Servlet chamado MeuCookie e MinhaSessao, utilize o código abaixo e rode sua aplicação, enquanto a aplicação está rodando na instancia do Tomcat do Eclipse, abra o seu navegador padrão e cole a url do navegador interno do Eclipse em seu browser, neste exemplo utilizamos o Firefox e logo após a pagina ser exibida digite seu nome no campo de texto e clique no botão da pagina:
2 – Assim que o método do botão for executado, um cookie e um atributo para a sessão serão criados, a pagina seguinte não lerá o nome guardado no cookie e sim no atributo da sessão criada no servidor através de seu identificador, você pode abrir outras instancias do navegador e copiar e colar a url para que você brinque com a sessão.
3 – Para ver o cookie e a sessão criada no seu navegador, abra Opções no menu do Firefox e escolha a aba privacidade:
4 – Clique no link excluir cookies em particular e digite no campo de busca, localhost. Selecione o cookie pelo seu nome e você pode ver os dados gravados no mesmo.
5 – Selecione a opção JSESSIONID e você verá o ID da sessão em você está conectado, assim que você fechar o browser o cookie e a sessão serão excluídos.
Exemplo:
Neste exemplo criamos um cookie e definimos um atributo para a sessão com o valor do cookie e logo recuperamos o atributo da sessão para que possamos exibir o valor gravado no cookie.
Java
Servlet – MeuCookie
package org.desenvolvimento.aberto; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/MeuCookie") public class MeuCookie extends HttpServlet { private static final long serialVersionUID = 1L; public MeuCookie() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Mostra pagina HTML response.setContentType("text/html"); PrintWriter html = response.getWriter(); html.println("<html>"); html.println("<body>"); html.println("<h1>Desenvolvimento Aberto</h1>"); html.println("<h2>Cookies - Memoriza Dados</h2>"); // Formulário processa este mesmo Servlet e o método DoPost html.println("<form action='MeuCookie' method='post'>"); // Manipula cookie String nome = getDaCookieNome(request); if (nome != null) html.println("Nome: " + nome + " <br> "); else { html.println("Nome: <input type='text' name='nome' size ='55' /> "); html.println("<input type='submit' name='adiciona' value='Adicionar'/> <br>"); } html.println("<a href='MinhaSessao'>testar Sessão</a>"); html.println("</form>"); html.println("</body>"); html.println("</html>"); } private String getDaCookieNome(HttpServletRequest request) { // Recupera cookie for (Cookie cookie : request.getCookies()) if (cookie.getName().equals("DAname3")) return cookie.getValue(); return null; } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Recupera cookie String nome = getDaCookieNome(request); if (nome == null) { // Recupera parâmetro nome = request.getParameter("nome"); // Define sessão request.getSession().setAttribute("DAname3", nome); // Cria Cookie Cookie cookie = new Cookie("DAname3", nome); // Redireciona página response.addCookie(cookie); // Redireciona página response.sendRedirect("MinhaSessao"); } } }
Servlet – MinhaSessao
package org.desenvolvimento.aberto; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/MinhaSessao") public class MinhaSessao extends HttpServlet { private static final long serialVersionUID = 1L; public MinhaSessao() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Mostra pagina HTML response.setContentType("text/html"); PrintWriter html = response.getWriter(); html.println("<html>"); html.println("<body>"); html.println("<h1>Desenvolvimento Aberto</h1>"); html.println("<h2>Cookies Sessão- Memoriza Dados Por Sessão</h2>"); // Recupera sessão String nome = (String) request.getSession().getAttribute("DAname3"); if (nome != null) html.println("Nome: " + nome + " <br> "); else { html.println("Nome: Não identificado <br> "); } html.println("</form>"); html.println("</body>"); html.println("</html>"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }