Как я могу делать сеансы в Java, если кто-то отключает куки в моем браузере? - PullRequest
7 голосов
/ 14 января 2010

Я хотел бы знать, если кто-то отключает куки в моем браузере, тогда куки не работают для моего браузера, тогда как я могу делать сессии в Java. Я пишу сервлеты для программирования на стороне сервера. Тогда как мои сессии работают? Как он распознает пользователя? Как JSESSION ID хранится в куки ...

Ответы [ 8 ]

12 голосов
/ 14 января 2010

См. HttpServletResponse encodeURL () и encodeRedirectURL () .

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

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

5 голосов
/ 14 января 2010

Вам необходимо добавить jsessionid ко всем URL-адресам вашего веб-приложения, которые должны вызываться клиентом . Сюда входят URL-адреса перенаправления и ссылки на странице JSP.

В случае URL перенаправления необходимо использовать HttpServletResponse#encodeRedirectURL() first:

response.sendRedirect(response.encodeRedirectURL("page.jsp"));

В случае ссылок на странице JSP, вам, в основном, необходимо сначала пропустить эти URL через HttpServletResponse#encodeURL(). Вы можете сделать это с помощью тега JSTL (просто перетащите jstl-1.2.jar в /WEB-INF) <c:url>, он будет за тегом сцены передают URL через вышеупомянутый метод:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
...
    <a href="<c:url value="page1.jsp" />">link1</a>
    <a href="<c:url value="page2.jsp" />">link2</a>
    ...
    <form action="<c:url value="servlet" />" method="post">
        ...
    </form>
2 голосов
/ 14 января 2010

Для справки, полезно знать, что html5 представляет sessionStorage как часть Web Storage . На 24ways.org есть хорошая статья, представляющая это: Вырваться за края браузера .

Поддержка:

  • Последнее: Internet Explorer, Firefox, Safari (для ПК и мобильных устройств / iPhone)
  • Частично: Google Chrome (поддерживается только localStorage)
  • Не поддерживается: Opera (по состоянию на 10.10)

HTML5 (включая дополнения следующего поколения, которые еще находятся в разработке)

2 голосов
/ 14 января 2010

Если куки отключены, вы все равно можете поддерживать сеансы, отправив значение JSESSIONID в качестве параметра запроса, например:

http://www.mywebsite.com/somePage?JSESSIONID=389729387392

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

1 голос
/ 14 января 2010

Другие ответы великолепны; Мне не нужно повторять это. Но у меня есть некоторые дополнительные комментарии.

Пожалуйста, не помещайте данные сеанса (весь сеанс) в cookie, а только идентификатор сеанса, возможно, хэшированный. Людям слишком легко редактировать содержимое куки. Оставить данные сеанса на сервере; возможно, в базе данных, если у вас много одновременных пользователей или сеансы живут очень долго.

Если даже сам идентификатор сессии очень ценен, вы можете даже поместить его в параметр POST, тем самым предотвращая его появление в самом URL.

1 голос
/ 14 января 2010

Как уже упоминали другие, вы сервлет-контейнер, например, tomcat автоматически использует JSESSIONID в URL-адресе, если браузер не разрешает использование файлов cookie. Это настраивается в tomcat, как вы можете видеть в этом ответе .

Мой совет - попробуйте. Возьмите свое веб-приложение без изменений и запустите его в своем браузере с отключенными файлами cookie и посмотрите, что произойдет.

1 голос
/ 14 января 2010

Если файлы cookie отключены, большинство поставщиков сеансов добавляют параметр URL-адреса JSESSIONID для поддержания состояния сеанса

0 голосов
/ 14 января 2010

Посмотрите на стандартные теги для JSP-страниц, в частности тег <c:url>.

http://onjava.com/pub/a/pub/a/onjava/2002/05/08/jstl.html?page=2

Я считаю, что он также обрабатывает атрибут jsession-id, если файлы cookie недоступны.

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