diff --git a/session.go b/session.go
index 6d6c1aa0c71a6f7670a9ab69860017d250719ea0..73d4be4fbe68e62eaad7c47419eec44d0933141e 100644
--- a/session.go
+++ b/session.go
@@ -702,6 +702,15 @@ func (s *session) onAdmin(msg interface{}) {
 			return
 		}
 
+		if !s.IsSessionTime() {
+			s.handleDisconnectState(s)
+			if msg.err != nil {
+				msg.err <- errors.New("Connection outside of session time")
+				close(msg.err)
+			}
+			return
+		}
+
 		if msg.err != nil {
 			close(msg.err)
 		}
diff --git a/session_state.go b/session_state.go
index c45ec9dda4bd3978a41df993d0923d6489ea096d..c8b1f42a4a237ec85ef501db2cb9d68df7d63da3 100644
--- a/session_state.go
+++ b/session_state.go
@@ -22,12 +22,6 @@ func (sm *stateMachine) Start(s *session) {
 }
 
 func (sm *stateMachine) Connect(session *session) {
-	if !sm.IsSessionTime() {
-		session.log.OnEvent("Connection outside of session time")
-		sm.handleDisconnectState(session)
-		return
-	}
-
 	// No special logon logic needed for FIX Acceptors.
 	if !session.InitiateLogon {
 		sm.setState(session, logonState{})