code: func (cse *SessionCookieEngine) DecodeCookie(cookie ServerCookie, s session.Session) {
  	// Decode the session from a cookie.
  	// Separate the data from the signature.
  	cookieValue := cookie.GetValue()
  	hyphen := strings.Index(cookieValue, "-")
  	if hyphen == -1 || hyphen >= len(cookieValue)-1 {
  		return
  	}
  	sig, data := cookieValue[:hyphen], cookieValue[hyphen+1:]
  
  	// Verify the signature.
  	if !Verify(data, sig) {
  		sessionEngineLog.Warn("Session cookie signature failed")
  		return
  	}
  
  	// Parse the cookie into a temp map, and then load it into the session object
  	tempMap := map[string]string{}
  	ParseKeyValueCookie(data, func(key, val string) {
  		tempMap[key] = val
  	})
  	s.Load(tempMap)
  
  	// Check timeout after unpacking values - if timeout missing (or removed) destroy all session
  	// objects
  	if s.SessionTimeoutExpiredOrMissing() {
  		// If this fails we need to delete all the keys from the session
  		for key := range s {
  			delete(s, key)
  		}
  	}
  }
docs: // Exposed only for testing purposes