store, web: cite the source of what they rely on (assumptions part D)
Comments only, no behaviour changed. modernc.org/sqlite v1.60.1 (the _pragma list on every connection, busy_timeout first; extended result codes; a deferred BEGIN; multi-statement Exec) and SQLite 3.53.4's documentation (transactions, WAL, foreign keys, NOCASE, upsert, julianday, partial indexes); htmx 2.0.4 src/htmx.js; the Fetch and HTML standards for Sec-Fetch-Site, Origin, SameSite, __Host-, CSP and defer order; Go's html/template. Comments the source contradicts are corrected - the driver does not serialise writes (SetMaxOpenConns(1) does), htmx:load fires per swapped element, no-store does not keep a page out of history. Left for their own commits: D-S3 a migration two processes can both run, D-S20 recipient case, D-B3 Origin: null under Referrer-Policy: no-referrer, D-H5/H6/H7/H9 (audit M11, stage 4). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -30,7 +30,10 @@ func (s *Store) CreateSession(tokenHash string, userID int64, expiresAt time.Tim
|
||||
|
||||
// LookupSession returns the session for tokenHash, if any. It does not check
|
||||
// expiry itself — callers compare ExpiresAt against time.Now() and call
|
||||
// DeleteSession on an expired row, keeping the read side lock-free.
|
||||
// DeleteSession on an expired row, keeping the read side lock-free: in WAL
|
||||
// mode a reader takes no write lock and is not blocked by a writer
|
||||
// (https://sqlite.org/wal.html § 2.2). Within this process it still waits for
|
||||
// the one pooled connection (Open).
|
||||
func (s *Store) LookupSession(tokenHash string) (SessionRow, bool, error) {
|
||||
var (
|
||||
row SessionRow
|
||||
@@ -99,6 +102,8 @@ func (s *Store) DeleteUserSessions(userID int64) error {
|
||||
// abandoned session (cookie never presented again) does not sit in the table
|
||||
// forever. It piggybacks on session creation rather than running as its own
|
||||
// background loop.
|
||||
// expires_at is RFC3339 UTC text, so < compares moments (see
|
||||
// ListQueuedOlderThan).
|
||||
func (s *Store) DeleteExpiredSessions(now time.Time) (int64, error) {
|
||||
res, err := s.db.Exec(`DELETE FROM sessions WHERE expires_at < ?`, now.UTC().Format(time.RFC3339))
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user