docs: public MemcachedBackupSession createSession( String sessionId ) {
          if ( _log.isDebugEnabled() ) {
              _log.debug( "createSession invoked: " + sessionId );
          }
  
          checkMaxActiveSessions();
  
          final MemcachedBackupSession session = createEmptySession();
          session.setNew( true );
          session.setValid( true );
          session.setCreationTime( System.currentTimeMillis() );
          session.setMaxInactiveInterval( _manager.isMaxInactiveIntervalSet()
                  ? _manager.getMaxInactiveInterval()
                  : _manager.getContext().getSessionTimeout() * 60 );
  
          if ( sessionId == null || !_memcachedNodesManager.canHitMemcached( sessionId ) ) {
              sessionId = _manager.generateSessionId();
          }
  
          session.setId( sessionId );
  
          final Request request = _currentRequest.get();
          if(request != null) {
              request.setNote(NEW_SESSION_ID, sessionId);
          }
  
          // we must register us as holding a reference, otherwise we might remove the session too early. (#283)
          if(!_sticky) {
              // synchronized to have correct refcounts
              synchronized (_manager.getSessionsInternal()) {
                  session.registerReference();
              }
          }
  
          if ( _log.isDebugEnabled() ) {
              _log.debug( "Created new session with id " + session.getId() );
          }
  
          _manager.incrementSessionCounter();
          //if the new session exist in _invalidSessionsCache, we should remove it marking this session valid.(#284)
          if( _invalidSessionsCache.containsKey(session.getId()) ){
              if ( _log.isDebugEnabled() ) {
                  _log.debug( "Remove session id  " + session.getId() + "  from _invalidSessionsCache, marking new session valid" );
              }
              _invalidSessionsCache.remove(session.getId());            
          }
          return session;
  
      }