Как сохранить сеанс сервлета? - PullRequest
1 голос
/ 25 января 2011

Я написал простой сервлет, который хочу протестировать, чтобы старый сеанс сохранялся при обновлении браузера. Однако вместо этого он создает новую сессию каждый раз, когда я обновляю страницу. Разве это не должно создавать новый сеанс только когда я закрываю браузер? Я использую ServletRunner вместо запуска его на Tomcat, может ли это быть проблемой?

import java.io.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class SessionPlay extends HttpServlet
{
   public void doGet (HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException
   {

      resp.setContentType("text/html");

      //Get session object
      HttpSession session = req.getSession(true);

      String id = session.getId();


      PrintWriter out;
      String title = "Session play";



      // then write the data of the response
      out = resp.getWriter();

      out.println("<html><head><title>");
      out.println(title);
      out.println(id);
      out.println("</title></head><body>");
      out.println("<h1>" + title + "</h1>");

      if(session.isNew())
      {
         out.println("<p>Welcome new comer</p>");
         out.println("<p>" + id + "</p>");
      }
      else
      {
         out.println("<p>Welcome back</p>");
         out.println("<p>" + id + "</p>");
      }

      out.println("<form action=SessionPlay method=get>");
      out.println("<input type=input name=param1>");
      out.println("<input type=submit>");
      out.println("</form>");

      out.println("</body></html>");
      out.close();

   }
}

1 Ответ

2 голосов
/ 25 января 2011

Сеансы поддерживаются куки.Когда на сервере создается новый сеанс, он добавляет cookie в ответ, который клиент должен отправить обратно во всех последующих запросах в том же сеансе.

Однако вы, очевидно, обновляете Первоначальный запрос, нажав F5 или кнопку обновления в браузере.Первоначальный запрос не содержит cookie сеанса.Если вы добавите в HTML ссылку, которая указывает на саму страницу или другую страницу на том же сайте, и щелкните по ней, вы увидите, что сеанс будет просто поддерживаться.

Один из способов обойтиэто создает фильтр, который выполняет перенаправление при создании сеанса.


Обновление : файлы cookie отключены и зависят от хоста и контекста.Вам необходимо убедиться, что файлы cookie включены как на веб-сервере (например, Tomcat <Context> не имеет cookies="false"), так и на веб-браузере (где-то в настройках), и что имя хоста не является доменом интрасети (некоторые браузеры запрещают файлы cookie для пустых имен узлов)и что он отправляется в тот же контекст (имя контекста webapp).Советы по отладке файлов cookie см. В этом ответе .


. Не относящийся к проблеме, использование HTML в сервлете не является наилучшей практикой.Эта работа выполняется с помощью файла JSP.Используйте RequestDispatcher#forward(), чтобы переслать запрос в файл JSP после выполнения всех необходимых действий кода Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...