code: func Set(overseer Overseer, w http.ResponseWriter, r *http.Request, key string, value string) error {
  	var sess session
  	sessMap := make(map[string]string)
  
  	val, err := overseer.Get(w, r)
  	if err != nil && !IsNoSessionError(err) {
  		return errors.Wrap(err, "unable to get session")
  	}
  
  	if !IsNoSessionError(err) {
  		err = json.Unmarshal([]byte(val), &sess)
  		if err != nil {
  			return errors.Wrap(err, "unable to unmarshal session object")
  		}
  
  		if sess.Value != nil {
  			err = json.Unmarshal(*sess.Value, &sessMap)
  			if err != nil {
  				return errors.Wrap(err, "unable to unmarshal session map value")
  			}
  		}
  	}
  
  	sessMap[key] = value
  
  	mv, err := json.Marshal(sessMap)
  	if err != nil {
  		return errors.Wrap(err, "unable to marshal session map value")
  	}
  	sess.Value = (*json.RawMessage)(&mv)
  
  	ret, err := json.Marshal(sess)
  	if err != nil {
  		return errors.Wrap(err, "unable to marshal session object")
  	}
  
  	return overseer.Set(w, r, string(ret))
  }
docs: // Set is a JSON helper used for storing key-value session values.
  // Set modifies the marshalled map stored in the session to include the key value pair passed in.