session

package
v1.5.9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 22, 2026 License: MIT Imports: 12 Imported by: 0

Documentation

Index

Constants

View Source
const SessionStateVersion = 4

Variables

View Source
var (
	ErrSessionClosed = errors.New("session is closed")
)

Functions

func ValidateSessionFile added in v1.5.5

func ValidateSessionFile(path string) error

ValidateSessionFile validates a session file without loading it

Types

type CookieState added in v1.5.5

type CookieState struct {
	Domain   string     `json:"domain"`
	Path     string     `json:"path"`
	Name     string     `json:"name"`
	Value    string     `json:"value"`
	Expires  *time.Time `json:"expires,omitempty"`
	Secure   bool       `json:"secure,omitempty"`
	HttpOnly bool       `json:"http_only,omitempty"`
}

CookieState represents a serializable cookie

type Manager

type Manager struct {
	// contains filtered or unexported fields
}

Manager manages all active sessions

func NewManager

func NewManager() *Manager

NewManager creates a new session manager

func (*Manager) CloseSession

func (m *Manager) CloseSession(sessionID string) error

CloseSession closes and removes a session

func (*Manager) CreateSession

func (m *Manager) CreateSession(config *protocol.SessionConfig) (string, error)

CreateSession creates a new session and returns its ID

func (*Manager) GetSession

func (m *Manager) GetSession(sessionID string) (*Session, error)

GetSession retrieves a session by ID

func (*Manager) ListSessions

func (m *Manager) ListSessions() []SessionStats

ListSessions returns stats for all active sessions

func (*Manager) SessionCount

func (m *Manager) SessionCount() int

SessionCount returns the number of active sessions

func (*Manager) SetMaxSessions

func (m *Manager) SetMaxSessions(max int)

SetMaxSessions sets the maximum number of concurrent sessions

func (*Manager) SetSessionTimeout

func (m *Manager) SetSessionTimeout(timeout time.Duration)

SetSessionTimeout sets the session idle timeout

func (*Manager) Shutdown

func (m *Manager) Shutdown()

Shutdown closes all sessions and stops the manager

type Session

type Session struct {
	ID           string
	CreatedAt    time.Time
	LastUsed     time.Time
	RequestCount int64
	Config       *protocol.SessionConfig
	// contains filtered or unexported fields
}

Session represents a persistent HTTP session with connection affinity

func LoadSession added in v1.5.5

func LoadSession(path string) (*Session, error)

LoadSession loads a session from a file

func NewSession

func NewSession(id string, config *protocol.SessionConfig) *Session

NewSession creates a new session with its own connection pool

func NewSessionWithOptions added in v1.5.8

func NewSessionWithOptions(id string, config *protocol.SessionConfig, opts *SessionOptions) *Session

NewSessionWithOptions creates a new session with additional options for distributed caching etc.

func UnmarshalSession added in v1.5.5

func UnmarshalSession(data []byte) (*Session, error)

UnmarshalSession loads a session from JSON bytes

func (*Session) ClearCache

func (s *Session) ClearCache()

ClearCache clears all cached URLs (removes If-None-Match/If-Modified-Since headers)

func (*Session) ClearCookies

func (s *Session) ClearCookies()

ClearCookies removes all cookies from this session

func (*Session) Close

func (s *Session) Close()

Close marks the session as inactive and closes connections

func (*Session) Get

func (s *Session) Get(ctx context.Context, url string, headers map[string][]string) (*transport.Response, error)

Get performs a GET request

func (*Session) GetCookies

func (s *Session) GetCookies() map[string]string

GetCookies returns all cookies for this session

func (*Session) GetHeaderOrder added in v1.5.8

func (s *Session) GetHeaderOrder() []string

GetHeaderOrder returns the current header order. Returns preset's default order if no custom order is set.

func (*Session) GetProxy added in v1.5.8

func (s *Session) GetProxy() string

GetProxy returns the current proxy URL (unified proxy or TCP proxy)

func (*Session) GetStream added in v1.5.3

func (s *Session) GetStream(ctx context.Context, url string, headers map[string][]string) (*StreamResponse, error)

GetStream performs a streaming GET request

func (*Session) GetTCPProxy added in v1.5.8

func (s *Session) GetTCPProxy() string

GetTCPProxy returns the current TCP proxy URL

func (*Session) GetTransport

func (s *Session) GetTransport() *transport.Transport

GetTransport returns the session's transport

func (*Session) GetUDPProxy added in v1.5.8

func (s *Session) GetUDPProxy() string

GetUDPProxy returns the current UDP proxy URL

func (*Session) IdleTime

func (s *Session) IdleTime() time.Duration

IdleTime returns how long since the session was last used

func (*Session) IsActive

func (s *Session) IsActive() bool

IsActive returns whether the session is active

func (*Session) Marshal added in v1.5.5

func (s *Session) Marshal() ([]byte, error)

Marshal exports session state to JSON bytes

func (*Session) Post

func (s *Session) Post(ctx context.Context, url string, body []byte, headers map[string][]string) (*transport.Response, error)

Post performs a POST request

func (*Session) PostStream added in v1.5.3

func (s *Session) PostStream(ctx context.Context, url string, body []byte, headers map[string][]string) (*StreamResponse, error)

PostStream performs a streaming POST request

func (*Session) Request

func (s *Session) Request(ctx context.Context, req *transport.Request) (*transport.Response, error)

Request executes an HTTP request within this session

func (*Session) RequestStream added in v1.5.3

func (s *Session) RequestStream(ctx context.Context, req *transport.Request) (*StreamResponse, error)

RequestStream executes an HTTP request and returns a streaming response The caller is responsible for closing the response when done Note: Streaming does NOT support redirects - use Request() for redirect handling

func (*Session) Save added in v1.5.5

func (s *Session) Save(path string) error

Save exports session state to a file

func (*Session) SetCookie

func (s *Session) SetCookie(name, value string)

SetCookie sets a cookie for this session

func (*Session) SetCookies

func (s *Session) SetCookies(cookies map[string]string)

SetCookies sets multiple cookies for this session

func (*Session) SetHeaderOrder added in v1.5.8

func (s *Session) SetHeaderOrder(order []string)

SetHeaderOrder sets a custom header order for all requests. Pass nil or empty slice to reset to preset's default order. Order should contain lowercase header names.

func (*Session) SetProxy added in v1.5.8

func (s *Session) SetProxy(proxyURL string)

SetProxy sets or updates the proxy for all protocols (HTTP/1.1, HTTP/2, HTTP/3) This closes existing connections and recreates transports with the new proxy

func (*Session) SetSessionIdentifier added in v1.5.8

func (s *Session) SetSessionIdentifier(sessionId string)

SetSessionIdentifier sets a session identifier for TLS cache key isolation. This is used when the session is registered with a LocalProxy to ensure TLS sessions are isolated per proxy/session configuration.

func (*Session) SetTCPProxy added in v1.5.8

func (s *Session) SetTCPProxy(proxyURL string)

SetTCPProxy sets the proxy for TCP protocols (HTTP/1.1, HTTP/2)

func (*Session) SetUDPProxy added in v1.5.8

func (s *Session) SetUDPProxy(proxyURL string)

SetUDPProxy sets the proxy for UDP protocols (HTTP/3 via SOCKS5 or MASQUE)

func (*Session) Stats

func (s *Session) Stats() SessionStats

Stats returns session statistics

func (*Session) Touch

func (s *Session) Touch()

Touch updates the last used timestamp

type SessionOptions added in v1.5.8

type SessionOptions struct {
	// SessionCacheBackend is an optional distributed cache for TLS sessions
	SessionCacheBackend transport.SessionCacheBackend

	// SessionCacheErrorCallback is called when backend operations fail
	SessionCacheErrorCallback transport.ErrorCallback
}

SessionOptions contains additional options that can't be expressed in protocol.SessionConfig (e.g., interfaces and callbacks that can't be JSON serialized)

type SessionState added in v1.5.5

type SessionState struct {
	Version   int       `json:"version"`
	CreatedAt time.Time `json:"created_at"`
	UpdatedAt time.Time `json:"updated_at"`

	// Full session configuration - saves everything
	Config *protocol.SessionConfig `json:"config"`

	// Session data
	Cookies     []CookieState                        `json:"cookies"`
	TLSSessions map[string]transport.TLSSessionState `json:"tls_sessions"`

	// ECHConfigs stores ECH configurations per domain (base64 encoded)
	// This is essential for session resumption - the same ECH config must be used
	// when resuming as was used when creating the session ticket
	ECHConfigs map[string]string `json:"ech_configs,omitempty"`
}

SessionState represents the complete saveable session state

type SessionStats

type SessionStats struct {
	ID              string
	Preset          string
	CreatedAt       time.Time
	LastUsed        time.Time
	RequestCount    int64
	Active          bool
	CookieCount     int
	CacheEntryCount int // Number of cached URLs (for If-None-Match/If-Modified-Since)
	Age             time.Duration
	IdleTime        time.Duration
	TransportStats  map[string]interface{}
}

SessionStats contains session statistics

type StreamResponse added in v1.5.3

type StreamResponse = transport.StreamResponse

StreamResponse wraps transport.StreamResponse for session-level streaming

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL