Struts2 - действительно ли invalidate() метода SessionMap делает недействительными сессии?

Я использую в своих действиях SessionMap (org.apache.struts2.dispatcher.SessionMap<K,V>) отслеживать мои сеансы. Я также использую метод invalidate() предоставляется SessionMap для выхода из системы.

Используя "менеджер" веб-приложения, предоставленный Tomcat, я могу отслеживать сеансы на моем сервере. Когда я хочу выйти из моего веб-приложения, я вызываю метод invalidate(),

Но после вызова этого метода сеанс не истекает!Invalidate() метод только удалить объект, сохраненный в сеансе (например, пользовательский объект, созданный после login() но сессия существует.

Надеюсь, мое объяснение понятно, как я могу решить эту проблему? заранее спасибо

Мой код:

public String execute(){

    User user = authenticateUser( getUsername(), getPassword() ); 
    if ( user == null )
    {
        /* User not valid, return to input page. */
        return INPUT;
    }
    else{
        session.put( "user", user );
    }

    return SUCCESS;
}

и я лишить законной силы сеанс следующим образом:

public String logout(){
    session.invalidate();   
    System.out.println("LOGOUT");
    return "logout";
}

где сессия:

private SessionMap<String, Object> session;

2 ответа

Как вы отменяете сеанс, можете ли вы показать код? один из способов сделать сеанс недействительным

// Code fragment from class implementing SessionAware containing the 
// session map in a instance variable "session". Attempting to invalidate 
// an already-invalid session will result in an IllegalStateException.
if (session instanceof org.apache.struts2.dispatcher.SessionMap) {
    try {
        ((org.apache.struts2.dispatcher.SessionMap) session).invalidate();
    } catch (IllegalStateException e) {
        logger.error(msg, e);
    }
}

Более того, я согласен с Dave Вы должны быть обеспокоены, чтобы удалить конкретный экземпляр из сеанса

Сеанс создается, как только осуществляется доступ к JSP, если вы явно не сконфигурируете JSP, чтобы не создавать сеансы, плюс перехватчик сеанса S2 создаст один (если ваш стек включает его).

Тем не менее, удаление известного объекта из сеанса должно быть всем, что требуется для указания того, вышел ли человек из системы - полагаться на отсутствие сеанса требует слишком много дополнительной работы и довольно хрупко - просто забыть сообщить JSP страница не создавать сеанс создаст его.

Это намного чище и надежнее, чтобы держать что-то вроде User объект в сеансе, когда пользователь вошел в систему.

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