code: func (s *SessionStore) fetchSession(c context.Context, sessionID string) (*sessionEntity, error) {
  	chunks := strings.Split(sessionID, "/")
  	if len(chunks) != 3 || chunks[0] != s.Prefix {
  		logging.Warningf(c, "Malformed session ID %q, ignoring", sessionID)
  		return nil, nil
  	}
  	id, err := strconv.ParseInt(chunks[2], 10, 64)
  	if err != nil {
  		logging.Warningf(c, "Malformed session ID %q, ignoring", sessionID)
  		return nil, nil
  	}
  
  	c = ds.WithoutTransaction(c)
  	sessionEnt := sessionEntity{
  		ID:     id,
  		Parent: ds.MakeKey(c, "gaeauth.User", chunks[0]+"/"+chunks[1]),
  	}
  	switch err = ds.Get(c, &sessionEnt); err {
  	case nil:
  		if sessionEnt.IsClosed || clock.Now(c).After(sessionEnt.Expiration) {
  			return nil, nil
  		}
  		return &sessionEnt, nil
  	case ds.ErrNoSuchEntity:
  		return nil, nil
  	default:
  		return nil, transient.Tag.Apply(err)
  	}
  }
docs: // fetchSession fetches sessionEntity from the datastore and returns it if it is
  // still open and non-expired. Returns (nil, nil) otherwise. Broken sessionID is
  // logged and ignored, the function returns (nil, nil) in such case. Returns
  // only transient errors.