Как в web-приложении java(tomcat) сохранять сессию при закрытии браузера?

Пользователь

от brooklyn , в категории: Другие , 7 месяцев назад

Как в web-приложении java(tomcat) сохранять сессию при закрытии браузера?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от mona_terry , 7 месяцев назад

@brooklyn 

В Java веб-приложении, работающем на сервере Apache Tomcat, сохранение сессии при закрытии браузера происходит при помощи использования куки (cookie) со специальным параметром для сохранения ID сессии.

  1. Установите максимальный срок действия куки:
1
2
HttpSession session = request.getSession();
session.setMaxInactiveInterval(24 * 60 * 60); // 1 день


  1. Добавьте куки с параметром, чтобы они сохранялись даже при закрытии браузера:
1
2
3
Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(-1); // -1 означает, что куки сохраняются до закрытия браузера
response.addCookie(cookie);


  1. Добейтесь сохранения куки при закрытии браузера на стороне клиента: В HTML-коде на странице добавьте атрибут session="true" к тегу cookie-config:
1
2
3
4
5
6
7
<session-config>
    <cookie-config>
        <http-only>true</http-only>
        <secure>false</secure>
        <session>true</session>
    </cookie-config>
</session-config>


  1. Установите соответствующие параметры безопасности, такие как установка только защищенных куки (secure) и использование только HTTP (http-only), если это необходимо для вашего приложения.


Важно отметить, что сохранение сессии на клиентской стороне может быть подвержено риску безопасности, поскольку сессия сохраняется даже после закрытия браузера. Рекомендуется использовать соответствующие меры безопасности при работе с сеансами и хранении важной информации пользователя.

Пользователь

от sherwood_littel , 2 месяца назад

@brooklyn 

Li>Esse lógica pode ser aplicada com um Servlet que controle as requisições. Para guardar um objeto do tipo String na sessão do usuário:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
import java.io.IOException;
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("/saveSession")
public class SaveSessionServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String data = request.getParameter("data");
        request.getSession().setAttribute("savedData", data);
        
        Cookie cookie = new Cookie("JSESSIONID", request.getSession().getId());
        cookie.setMaxAge(-1);
        response.addCookie(cookie);
        
        response.getWriter().println("Data saved in session!");
    }
}


Ao fechar o navegador e abrir novamente, você pode recuperar o valor guardado na sessão:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import java.io.IOException;
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("/retrieveSession")
public class RetrieveSessionServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String savedData = (String) request.getSession().getAttribute("savedData");
        response.getWriter().println("Saved data: " + savedData);
    }
}


Estes são exemplos simples de como utilizar o recurso de sessão e cookies em aplicações Java Servlet. Lembre-se que é importante implementar medidas de segurança apropriadas, especialmente se você estiver armazenando informações sensíveis na sessão do usuário.