Явно установить JSESSIONID

Итак, я нахожусь в процессе создания приложения, в котором я хочу, чтобы пользователь мог отправлять ссылку другому пользователю и работать с теми же данными. Нет необходимости сохранять данные более 15 минут, и я хочу, чтобы приложение не полагалось на базу данных.

У меня есть несколько переменных, которые я сейчас храню в HttpSession.

В идеале я хотел бы иметь возможность установить параметр "sid" в URL-адресе и использовать его для установки идентификатора сеанса в браузере второго клиента - тот, который получил ссылку с SID.

К сожалению, кажется, что невозможно изменить SID текущего сеанса после его настройки.

Единственное решение, которое я придумала до сих пор, это обращение к doGet() с HttpPost.setHeader("Cookie", "JSESSIONID="+ getSessionId()) метод, и получение данных с определенной сессии таким образом, но это кажется довольно неуклюжим.

Какие-либо предложения?

РЕДАКТИРОВАТЬ

Это, по-видимому, превратилось в дискуссию о целесообразности настройки двух пользователей на один и тот же сеанс, чтобы переменные сеансов могли быть одинаковыми. Обратите внимание, что я искал не дб, то есть решение с малым весом. PHP позволяет вам произвольно установить идентификатор сеанса для этого, но в этом случае я развертываю Tomcat. Что-то, что позволяет облегчить совместное использование нескольких параметров, вот и все...

Что я сделал, так это установил контекстные переменные, используя context.setAttribute(), Ужасно как грех, но все, что я могу придумать, если у кого-то нет идей получше.

1 ответ

Решение

У этого подхода есть некоторые проблемы безопасности, потому что вы имитируете [перехват сеанса] с ним 1:

В компьютерной науке перехват сеансов, иногда также называемый перехватом файлов cookie, представляет собой использование действительного компьютерного сеанса, иногда называемого также ключом сеанса, для получения несанкционированного доступа к информации или услугам в компьютерной системе. В частности, он используется для обозначения кражи волшебного cookie-файла, используемого для аутентификации пользователя на удаленном сервере. Он имеет особое отношение к веб-разработчикам, поскольку куки-файлы HTTP, используемые для поддержания сеанса на многих веб-сайтах, могут быть легко украдены злоумышленником с помощью компьютера-посредника или с доступом к сохраненным куки-файлам на компьютере жертвы (см. Кража куки-файлов HTTP).

Лучший подход - настроить данные таким образом, чтобы оба пользователя могли обращаться к ним со своих сеансов. Если вы используете один сервер, вы можете сделать это с некоторыми глобальными данными на сервере. В кластерных или облачных средах вам понадобится некоторое общее хранилище для этого (например, база данных, глобальный кеш и т. Д.)

РЕДАКТИРОВАТЬ

Вы находитесь на правильном пути для обмена данными между двумя пользователями с различными сессиями.

Существует один контекст для каждого "веб-приложения" для каждой виртуальной машины Java, где атрибут позволяет контейнеру сервлета предоставлять сервлету дополнительную информацию.

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

Для кластеров:

В случае веб-приложения, помеченного как "распределенное" в его дескрипторе развертывания, для каждой виртуальной машины будет один экземпляр контекста. В этой ситуации контекст не может использоваться как место для обмена глобальной информацией (потому что информация не будет действительно глобальной). Вместо этого используйте внешний ресурс, такой как база данных.

Другие вопросы по тегам