code: func (s *HTTPServer) SessionCreate(resp http.ResponseWriter, req *http.Request) (interface{}, error) {
  	// Default the session to our node + serf check + release session
  	// invalidate behavior.
  	args := structs.SessionRequest{
  		Op: structs.SessionCreate,
  		Session: structs.Session{
  			Node:      s.agent.config.NodeName,
  			Checks:    []types.CheckID{structs.SerfCheckID},
  			LockDelay: 15 * time.Second,
  			Behavior:  structs.SessionKeysRelease,
  			TTL:       "",
  		},
  	}
  	s.parseDC(req, &args.Datacenter)
  	s.parseToken(req, &args.Token)
  
  	// Handle optional request body
  	if req.ContentLength > 0 {
  		fixup := func(raw interface{}) error {
  			if err := FixupLockDelay(raw); err != nil {
  				return err
  			}
  			if err := FixupChecks(raw, &args.Session); err != nil {
  				return err
  			}
  			return nil
  		}
  		if err := decodeBody(req, &args.Session, fixup); err != nil {
  			resp.WriteHeader(http.StatusBadRequest)
  			fmt.Fprintf(resp, "Request decode failed: %v", err)
  			return nil, nil
  		}
  	}
  
  	// Create the session, get the ID
  	var out string
  	if err := s.agent.RPC("Session.Apply", &args, &out); err != nil {
  		return nil, err
  	}
  
  	// Format the response as a JSON object
  	return sessionCreateResponse{out}, nil
  }
docs: // SessionCreate is used to create a new session