Java 如何在没有ivalidate方法帮助的情况下延长疗程

Java 如何在没有ivalidate方法帮助的情况下延长疗程,java,jsp,servlets,Java,Jsp,Servlets,我面临一些问题,我想在会话到期时更新登录表。。。 这里define方法总是提供新的会话,并且在某些条件下更新数据 public HttpSession getNewSession(HttpServletRequest request,HttpServletResponse response){ HttpSession httpSession = request.getSession(false); log.debug("Incoming httpSession.getId(

我面临一些问题,我想在会话到期时更新登录表。。。 这里define方法总是提供新的会话,并且在某些条件下更新数据

public HttpSession getNewSession(HttpServletRequest request,HttpServletResponse response){

    HttpSession httpSession =  request.getSession(false);

    log.debug("Incoming httpSession.getId() :: " + httpSession.getId());
    long lastAccessedTime = (System.currentTimeMillis()-httpSession.getLastAccessedTime())/1000;
    log.debug((System.currentTimeMillis()-httpSession.getLastAccessedTime()) + " milliSecond.");
    log.debug( lastAccessedTime + " Second. ");
    log.debug( lastAccessedTime + " lastAccessedTime>=900");
    if(lastAccessedTime>=900){
        log.debug( "true  lastAccessedTime>=900");
        String userName = null != httpSession.getAttribute(USER_NAME)?httpSession.getAttribute(USER_NAME)+"":"";
        CGLoginService documentManagementService = new CGLoginIMPL();
        if(userName.length()>=1){
            CGLoginDTO cgTrgLoginDTO = new CGLoginDTO();
            cgTrgLoginDTO.setLoginFlag("false");
            cgTrgLoginDTO.setUpdatedDate(new Timestamp(new Date().getTime()));
            cgTrgLoginDTO.setLockFlag("false");
            cgTrgLoginDTO.setLockCount(0);
            CGLoginDTO cgLoginDTO = new CGLoginDTO();
            cgLoginDTO.setLoginId(userName);
            try {
                documentManagementService.updateUsers(cgTrgLoginDTO, cgLoginDTO, null, false);
            } catch (BuisnessException e) {
                e.printStackTrace();
                log.error(" Exception found while updating user is "+e);
            }
        }
        httpSession.invalidate();
        log.debug("httpSession.invalidate();");
    }else{
        log.debug("lastAccessedTime>=900 where session not expire and Outgoing httpSession.getId() :: " + httpSession.getId());
        log.debug("user name :: " +httpSession.getAttribute("userName"));
        if(httpSession !=null && httpSession.getAttribute("userName") !=null){
            log.debug( "true  httpSession !=null && httpSession.getAttribute(USER_NAME) !=null");
            Object userName = httpSession.getAttribute("userName") ;
            Object userRole = httpSession.getAttribute("userRole");
            Object userToken = (httpSession.getAttribute("userToken") !=null)?httpSession.getAttribute("userToken"):"";
            Object lastLogin = (httpSession.getAttribute("lastLogin") !=null)?httpSession.getAttribute("lastLogin"):"";

            httpSession.invalidate();

            httpSession = request.getSession(true);

            httpSession.setMaxInactiveInterval(900);
            httpSession.setAttribute("userName", userName);
            httpSession.setAttribute("userRole", userRole);
            httpSession.setAttribute("userToken", userToken);
            httpSession.setAttribute("lastLogin",lastLogin);
            log.debug("Outgoing httpSession.getId() :: " + httpSession.getId());
            return httpSession;
        }else
            log.debug("session not map define value ");
            httpSession = null;
    }
    return httpSession;
}
我也使用HttpSessionListener接口来处理这个问题,但是session.invalidate()方法也使用listener的销毁方法。。
因为所有时间都需要新的会话id…

您可以从会话中删除值

 httpSession.removeAttribute("userName");