From cbe9f2afe423a281962eb5f8732e1f06a9d43db3 Mon Sep 17 00:00:00 2001 From: Jacob Walker Date: Wed, 6 May 2015 11:10:11 -0500 Subject: [PATCH] Make a copy of Options for each new session --- pgstore.go | 3 ++- pgstore_test.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/pgstore.go b/pgstore.go index e26e649..a91789a 100644 --- a/pgstore.go +++ b/pgstore.go @@ -74,7 +74,8 @@ func (db *PGStore) New(r *http.Request, name string) (*sessions.Session, error) if session == nil { return session, nil } - session.Options = &(*db.Options) + opts := *db.Options + session.Options = &(opts) session.IsNew = true var err error diff --git a/pgstore_test.go b/pgstore_test.go index 3321484..75a1a9e 100644 --- a/pgstore_test.go +++ b/pgstore_test.go @@ -99,3 +99,31 @@ func TestPGStore(t *testing.T) { } } + +func TestSessionOptionsAreUniquePerSession(t *testing.T) { + ss := NewPGStore(os.Getenv("PGSTORE_TEST_CONN"), []byte(secret)) + + if ss == nil { + t.Fatal("This test requires a real database") + } + + defer ss.Close() + + ss.Options.MaxAge = 900 + + req, err := http.NewRequest("GET", "http://www.example.com", nil) + if err != nil { + t.Fatal("Failed to create request", err) + } + + session, err := ss.Get(req, "newsess") + if err != nil { + t.Fatal("Failed to create session", err) + } + + session.Options.MaxAge = -1 + + if ss.Options.MaxAge != 900 { + t.Fatalf("PGStore.Options.MaxAge: expected %d, got %d", 900, ss.Options.MaxAge) + } +}