Сколько времени Вы имеете в наличии сеансовые куки для?

Я реализую веб-приложение, которое использует сессии. Я использую GWT и механизм приложения как мой клиент/сервер, но я не думаю, что они делают что-либо действительно различное, чем я сделал бы с PHP и апачем и т.д.

Когда пользователь входит в мое веб-приложение, я использую HttpSession для запуска сессии для них. Я получаю сессию, я хотел бы это:

// From my login servlet:
getThreadLocalRequest().getSession(false).getId();

Я возвращаю sessionId назад клиенту, и они хранят его в cookie. Учебное руководство, которое я использую, устанавливает этот cookie для 'истекания' за две недели:

Cookie.write("sid", theSessionId, 1000 * 60 * 60 * 24 * 14); // two weeks

Вот то, где я смущен: если cookie истечет через две недели, то мой пользователь продвинется с помощью веб-приложения счастливо, только к одному дневному обзору на мой сайт и показан экран входа в систему. Каковы мои опции? Я не могу просто установить время истечения срока для этого cookie? Тем путем пользователь должен был бы явно выйти из системы, иначе они могли просто использовать приложение навсегда, не имея необходимость входить в?

Или есть ли лучший способ сделать это? Я не могу помнить сайты как Твиттер, когда-либо попросивший, чтобы я вошел в снова. Я, кажется, постоянно зарегистрирован. Они просто не устанавливают истечения?

Веб-приложение не защищает вида очень уязвимых данных, таким образом, я не возражаю оставлять cookie, который не истекает, но кажется, что должен быть лучший путь?

Это - учебное руководство, на которое я ссылаюсь:

http://code.google.com/p/google-web-toolkit-incubator/wiki/LoginSecurityFAQ

Спасибо

5
задан BalusC 24 April 2010 в 04:16
поделиться

1 ответ

HttpSession за кулисами уже подкреплен куки. Проверьте список куки браузера на наличие куки с именем jsessionid. Далее, при получении экземпляра следует вызывать getSession() без false, иначе вы рискуете получить NullPointerException, когда он еще не создан и, соответственно, вернет null.

Когда вы выполняете вход в систему, вы обычно помещаете вошедшего пользователя в сессию.

User user = userDAO.find(username, password);
if (user != null) {
    session.setAttribute("user", user);
} else {
    // Handle error "Unknown username/password combo."
}

Вы можете позволить вашему веб-приложению перехватывать данные о вошедшем User, просто проверяя его присутствие в сессии. Например, в Фильтре, который вы хотите использовать для блокирования защищенных страниц.

if (session.getAttribute("user") == null) {
    response.sendRedirect("login"); 
} else {
    chain.doFilter(request, response);
}

Сессия HttpSession в большинстве веб-контейнеров имеет таймаут по умолчанию 30 минут. Другими словами, он истечет через 30 минут после последнего запроса. Это настраивается в web.xml следующим образом:

<session-config>
    <session-timeout>10</session-timeout>
</session-config>

Где таймаут указан в минутах (таким образом, 10 минут в приведенном выше примере).

Если вы хотите предоставить (автоматическую) опцию "Запомнить меня на этом компьютере", то вам нужно создать еще один cookie с другим идентификатором. Ранее я уже публиковал ответ, в котором подробно рассказывается об этом: Java - Как сохранить пользователя, вошедшего на мой сайт, в течение нескольких месяцев?

3
ответ дан 15 December 2019 в 06:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: