Skip to content

Commit f7e9b6b

Browse files
authored
Merge pull request #47 from goldmar/fix/iphone-session-cookie-expires
fix: add explicit expiry to login session cookie
2 parents ee2dfe8 + e300944 commit f7e9b6b

2 files changed

Lines changed: 16 additions & 3 deletions

File tree

internal/web/handlers.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4897,6 +4897,7 @@ func (h *Handler) loginPost(w http.ResponseWriter, r *http.Request) {
48974897
Value: token,
48984898
Path: "/",
48994899
MaxAge: sessionMaxAge,
4900+
Expires: time.Now().Add(time.Duration(sessionMaxAge) * time.Second),
49004901
HttpOnly: true,
49014902
Secure: h.config.SecureCookies || (h.config.Host != "" && h.config.Host != "0.0.0.0" && h.config.Host != "127.0.0.1"),
49024903
SameSite: http.SameSiteStrictMode,

internal/web/handlers_extra_test.go

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6800,15 +6800,27 @@ func TestHandler_LoginPost_SuccessWithRateLimiter(t *testing.T) {
68006800

68016801
// Cookie should be set
68026802
cookies := rr.Result().Cookies()
6803-
found := false
6803+
var sessionCookie *http.Cookie
68046804
for _, c := range cookies {
68056805
if c.Name == "onwatch_session" {
6806-
found = true
6806+
sessionCookie = c
68076807
break
68086808
}
68096809
}
6810-
if !found {
6810+
if sessionCookie == nil {
68116811
t.Error("expected session cookie to be set")
6812+
return
6813+
}
6814+
if sessionCookie.MaxAge != sessionMaxAge {
6815+
t.Errorf("expected MaxAge %d, got %d", sessionMaxAge, sessionCookie.MaxAge)
6816+
}
6817+
if sessionCookie.Expires.IsZero() {
6818+
t.Error("expected Expires to be set for persistent session cookie")
6819+
}
6820+
expectedMin := time.Now().Add(time.Duration(sessionMaxAge-5) * time.Second)
6821+
expectedMax := time.Now().Add(time.Duration(sessionMaxAge+5) * time.Second)
6822+
if sessionCookie.Expires.Before(expectedMin) || sessionCookie.Expires.After(expectedMax) {
6823+
t.Errorf("expected Expires within [%v, %v], got %v", expectedMin, expectedMax, sessionCookie.Expires)
68126824
}
68136825
}
68146826

0 commit comments

Comments
 (0)