Явно установить JSESSIONID
Итак, я нахожусь в процессе создания приложения, в котором я хочу, чтобы пользователь мог отправлять ссылку другому пользователю и работать с теми же данными. Нет необходимости сохранять данные более 15 минут, и я хочу, чтобы приложение не полагалось на базу данных.
У меня есть несколько переменных, которые я сейчас храню в HttpSession.
В идеале я хотел бы иметь возможность установить параметр "sid" в URL-адресе и использовать его для установки идентификатора сеанса в браузере второго клиента - тот, который получил ссылку с SID.
К сожалению, кажется, что невозможно изменить SID текущего сеанса после его настройки.
Единственное решение, которое я придумала до сих пор, это обращение к doGet() с HttpPost.setHeader("Cookie", "JSESSIONID="+ getSessionId())
метод, и получение данных с определенной сессии таким образом, но это кажется довольно неуклюжим.
Какие-либо предложения?
РЕДАКТИРОВАТЬ
Это, по-видимому, превратилось в дискуссию о целесообразности настройки двух пользователей на один и тот же сеанс, чтобы переменные сеансов могли быть одинаковыми. Обратите внимание, что я искал не дб, то есть решение с малым весом. PHP позволяет вам произвольно установить идентификатор сеанса для этого, но в этом случае я развертываю Tomcat. Что-то, что позволяет облегчить совместное использование нескольких параметров, вот и все...
Что я сделал, так это установил контекстные переменные, используя context.setAttribute()
, Ужасно как грех, но все, что я могу придумать, если у кого-то нет идей получше.
1 ответ
У этого подхода есть некоторые проблемы безопасности, потому что вы имитируете [перехват сеанса] с ним 1:
В компьютерной науке перехват сеансов, иногда также называемый перехватом файлов cookie, представляет собой использование действительного компьютерного сеанса, иногда называемого также ключом сеанса, для получения несанкционированного доступа к информации или услугам в компьютерной системе. В частности, он используется для обозначения кражи волшебного cookie-файла, используемого для аутентификации пользователя на удаленном сервере. Он имеет особое отношение к веб-разработчикам, поскольку куки-файлы HTTP, используемые для поддержания сеанса на многих веб-сайтах, могут быть легко украдены злоумышленником с помощью компьютера-посредника или с доступом к сохраненным куки-файлам на компьютере жертвы (см. Кража куки-файлов HTTP).
Лучший подход - настроить данные таким образом, чтобы оба пользователя могли обращаться к ним со своих сеансов. Если вы используете один сервер, вы можете сделать это с некоторыми глобальными данными на сервере. В кластерных или облачных средах вам понадобится некоторое общее хранилище для этого (например, база данных, глобальный кеш и т. Д.)
РЕДАКТИРОВАТЬ
Вы находитесь на правильном пути для обмена данными между двумя пользователями с различными сессиями.
Существует один контекст для каждого "веб-приложения" для каждой виртуальной машины Java, где атрибут позволяет контейнеру сервлета предоставлять сервлету дополнительную информацию.
Атрибуты предназначены для совместного использования данных внутри контейнера сервлетами одного и того же веб-приложения.
Для кластеров:
В случае веб-приложения, помеченного как "распределенное" в его дескрипторе развертывания, для каждой виртуальной машины будет один экземпляр контекста. В этой ситуации контекст не может использоваться как место для обмена глобальной информацией (потому что информация не будет действительно глобальной). Вместо этого используйте внешний ресурс, такой как база данных.