Сеансы JSP / Servlets + PHP: отслеживание сессий - JSON / Database или HttpSessionListener? - PullRequest
0 голосов
/ 06 декабря 2010

Я реализовал сервлет, и сайт PHP обращается к этому сервлету для получения данных.Мне интересно, каков наилучший метод для хранения переменной сеанса, или я должен хранить ее вообще.

Переменные, которые должны быть сохранены, включают ArrayList и другие объекты.

Я обдумал 3 возможности:

(1) Реализовать HttpSessionListener и сохранитькаждый сеанс (когда он создается) в статический SessionMap.Затем удалите сеанс после его уничтожения.

(2) Сохраните все в формате JSON.Поэтому мне придется сериализовать / десериализовать каждый объект и передавать его туда и обратно.(У меня есть список элементов в каждом ArrayList / Object, который я хочу отслеживать между щелчками пользователя.)

(3) Сохранение информации в MongoDB (только для выбора одного), используя SessionID в качестве основногоключ.

Что вы, ребята, думаете?

Ответы [ 2 ]

0 голосов
/ 06 декабря 2010

HttpSessionListener здесь не требуется. Все, что вам в основном нужно сделать в сервлете:

List<String> links = (List<String>) request.getSession().getAttribute("links");
if (links == null) {
    links = new ArrayList<String>();
    request.getSession().setAttribute("links", links);
}
links.add(request.getParameter("link"));

Атрибуты будут использованы в любом случае, когда сеанс будет уничтожен.

JSON только добавляет ненужные накладные расходы, а база данных полезна только тогда, когда в веб-сервере недостаточно места для памяти (однако, БД, в свою очередь, также потребляет память в определенной степени).

Мне только интересно, как вы думаете поддерживать ту же сессию сервлета с PHP. Это может включать вызов сервлета с использованием атрибута JSESSIONID в URL (плохая идея) или сценария PHP с curl, выступающим в качестве прокси (почему бы просто не сделать все это в PHP?). Или он работает в том же домене? Или вы используете Quercus для запуска PHP на сервлет-контейнере Java?

0 голосов
/ 06 декабря 2010

Мне скорее нравится комбинация всех трех.

  1. Преимущество простоты - нет необходимости обращаться к базе данных, если есть доступный сеанс.
  2. JSON облегчен и является языком браузера.
  3. Хранение элементов в базе данных и извлечение их с использованием идентификатора сеанса позволяет пользователям запускать сеанс, оставляя его в неполном состояниии вернуться позже, чтобы забрать, где они остановились.База данных может быть хорошим способом хранения информации, если требования к памяти становятся большими и громоздкими.

Я не думаю, что это должен быть эксклюзивный выбор.

...