session

package
v1.5.10 Latest Latest
Warning

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

Go to latest
Published: Jan 30, 2026 License: MIT Imports: 14 Imported by: 0

Documentation

Index

Constants

View Source
const SessionStateVersion = 5

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 CookieData added in v1.5.10

type CookieData struct {
	Name      string
	Value     string
	Domain    string // Normalized domain (with leading dot for domain cookies)
	HostOnly  bool   // True if cookie should only be sent to exact host
	Path      string
	Expires   *time.Time
	MaxAge    int
	Secure    bool
	HttpOnly  bool
	SameSite  string
	CreatedAt time.Time
}

CookieData extends CookieState with creation time for sorting

type CookieJar added in v1.5.10

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

CookieJar manages cookies with proper domain and path scoping Cookies are stored by domain, then by (path, name) tuple

func NewCookieJar added in v1.5.10

func NewCookieJar() *CookieJar

NewCookieJar creates a new empty cookie jar

func (*CookieJar) BuildCookieHeader added in v1.5.10

func (j *CookieJar) BuildCookieHeader(requestHost, requestPath string, requestSecure bool) string

BuildCookieHeader builds the Cookie header value for a request

func (*CookieJar) Clear added in v1.5.10

func (j *CookieJar) Clear()

Clear removes all cookies

func (*CookieJar) ClearExpired added in v1.5.10

func (j *CookieJar) ClearExpired()

ClearExpired removes all expired cookies

func (*CookieJar) Count added in v1.5.10

func (j *CookieJar) Count() int

Count returns the total number of cookies across all domains

func (*CookieJar) Export added in v1.5.10

func (j *CookieJar) Export() map[string][]CookieState

Export exports all cookies grouped by domain for serialization

func (*CookieJar) Get added in v1.5.10

func (j *CookieJar) Get(requestHost, requestPath string, requestSecure bool) []*CookieData

Get returns all cookies that should be sent for a request requestHost is the target host requestPath is the request path requestSecure is true if the request is over HTTPS

func (*CookieJar) GetAll added in v1.5.10

func (j *CookieJar) GetAll() map[string]string

GetAll returns all cookies (for inspection/debugging)

func (*CookieJar) Import added in v1.5.10

func (j *CookieJar) Import(cookies map[string][]CookieState)

Import imports cookies from the v5 format (domain-keyed)

func (*CookieJar) ImportV4 added in v1.5.10

func (j *CookieJar) ImportV4(cookies []CookieState)

ImportV4 imports cookies from the v4 format (flat list)

func (*CookieJar) Set added in v1.5.10

func (j *CookieJar) Set(requestHost string, cookie *CookieData, requestSecure bool)

Set adds or updates a cookie from a Set-Cookie header requestHost is the host that sent the Set-Cookie header requestSecure is true if the request was over HTTPS

func (*CookieJar) SetSimple added in v1.5.10

func (j *CookieJar) SetSimple(name, value string)

SetSimple sets a cookie with just name and value (for backward compatibility)

type CookieState added in v1.5.5

type CookieState struct {
	Name      string     `json:"name"`
	Value     string     `json:"value"`
	Domain    string     `json:"domain,omitempty"`
	Path      string     `json:"path,omitempty"`
	Expires   *time.Time `json:"expires,omitempty"`
	MaxAge    int        `json:"max_age,omitempty"`
	Secure    bool       `json:"secure,omitempty"`
	HttpOnly  bool       `json:"http_only,omitempty"`
	SameSite  string     `json:"same_site,omitempty"`
	CreatedAt *time.Time `json:"created_at,omitempty"` // v5: for sorting
}

CookieState represents a serializable cookie with full metadata

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 (name -> value) Note: This returns a flat map for backward compatibility. Multiple cookies with the same name from different domains will only show the last one.

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) Refresh added in v1.5.10

func (s *Session) Refresh()

Refresh closes all connections but keeps TLS session caches and cookies intact. This simulates a browser page refresh - new TCP/QUIC connections but TLS resumption. Useful for resetting connection state without losing session tickets or cookies.

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 Note: This sets a "global" cookie that will be sent to all domains. For domain-specific cookies, use Set-Cookie headers from responses.

func (*Session) SetCookies

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

SetCookies sets multiple cookies for this session Note: These are "global" cookies that will be sent to all domains.

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 - v5 format: cookies keyed by domain
	// Key is the domain (e.g., ".example.com" for domain cookies, "example.com" for host-only)
	Cookies map[string][]CookieState `json:"cookies"`

	// TLS Sessions keyed by origin "protocol:host:port"
	// e.g., "h2:example.com:443", "h3:api.example.com:443"
	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 SessionStateV4 added in v1.5.10

type SessionStateV4 struct {
	Version     int                                  `json:"version"`
	CreatedAt   time.Time                            `json:"created_at"`
	UpdatedAt   time.Time                            `json:"updated_at"`
	Config      *protocol.SessionConfig              `json:"config"`
	Cookies     []CookieState                        `json:"cookies"` // v4: flat list
	TLSSessions map[string]transport.TLSSessionState `json:"tls_sessions"`
	ECHConfigs  map[string]string                    `json:"ech_configs,omitempty"`
}

SessionStateV4 represents the v4 format for migration

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