Как проверить, существует ли сеанс или нет?

Я создаю сеанс, используя

HttpSession session = request.getSession();

Перед созданием сеанса я хочу проверить, существует ли он или нет. Как мне это сделать?

Ответы

Ответ 1

Если вы хотите проверить это перед созданием, сделайте следующее:

HttpSession session = request.getSession(false);
if (session == null) {
    // Not created yet. Now do so yourself.
    session = request.getSession();
} else {
    // Already created.
}

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

HttpSession session = request.getSession();
if (session.isNew()) {
    // Freshly created.
} else {
    // Already created.
}

Это сохраняет строку и boolean. request.getSession() делает то же самое, что request.getSession(true).

Ответ 2

Существует функция request.getSession(boolean create)

Параметры:
    create - true для создания нового сеанса для этого запроса, если это необходимо; false для возврата null, если нет текущей сессии

Таким образом, вы можете просто передать false, чтобы сообщить getSession вернуть значение null, если сеанс не существует.

Ответ 3

HttpSession session = request.getSession(true);   if (session.isNew()) {     ...сделай что-нибудь   } else {     ... сделать что-то еще   }

.getSession(true) указывает java на создание нового сеанса, если он не существует.

вы, конечно же, можете:

if(request.getSession(false) != null){
    HttpSession session = request.getSession();
}

посмотрите: http://java.sun.com/javaee/6/docs/api/javax/servlet/http/HttpServletRequest.html

веселит, Йорген

Ответ 4

if(null == session.getAttribute("name")){  
  // User is not logged in.  
}else{  
  // User IS logged in.  
}  

Ответ 5

Я хотел бы добавить, что если вы создадите новый сеанс для каждого нового пользователя, подключающегося к вашему сайту, то ваша производительность сильно пострадает. Используйте request.getSession(false), чтобы проверить, имеет ли пользователь сеанс. С помощью этого метода вы не создаете новый сеанс, если вы собираетесь визуализировать представление на основе аутентификации пользователя или нет.

Ответ 6

Определите класс, например SessionTimeoutIndicator, который реализует интерфейс javax.servlet.http.HttpSessionBindingListener. Затем создайте объект SessionTimeoutIndicator и добавьте его в сеанс пользователя. Когда сеанс удаляется, метод SessionTimeoutIndicator.valueUnbound() вызывается механизмом Servlet. Затем вы можете выполнить valueUnbound() для выполнения требуемой операции.