aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamil Kisiel <kamil@kamilkisiel.net>2013-07-09 03:08:57 +0400
committerKamil Kisiel <kamil@kamilkisiel.net>2013-07-09 03:10:05 +0400
commitee375ad9efa3c4d4eb23eb79dd8f083596460edb (patch)
tree5a885ba45b87113f32d4d58cd8498adceeca23c6
parentc044c93603af0d545821becf4fae68ea969eb074 (diff)
Copy store options to sessions instead of referencing them.
Fixes GH-8
-rw-r--r--store.go6
-rw-r--r--store_test.go48
2 files changed, 52 insertions, 2 deletions
diff --git a/store.go b/store.go
index 8d00cb3..fe31c08 100644
--- a/store.go
+++ b/store.go
@@ -73,7 +73,8 @@ func (s *CookieStore) Get(r *http.Request, name string) (*Session, error) {
// decoded session after the first call.
func (s *CookieStore) New(r *http.Request, name string) (*Session, error) {
session := NewSession(s, name)
- session.Options = &(*s.Options)
+ opts := *s.Options
+ session.Options = &opts
session.IsNew = true
var err error
if c, errCookie := r.Cookie(name); errCookie == nil {
@@ -148,7 +149,8 @@ func (s *FilesystemStore) Get(r *http.Request, name string) (*Session, error) {
// See CookieStore.New().
func (s *FilesystemStore) New(r *http.Request, name string) (*Session, error) {
session := NewSession(s, name)
- session.Options = &(*s.Options)
+ opts := *s.Options
+ session.Options = &opts
session.IsNew = true
var err error
if c, errCookie := r.Cookie(name); errCookie == nil {
diff --git a/store_test.go b/store_test.go
new file mode 100644
index 0000000..77fea6b
--- /dev/null
+++ b/store_test.go
@@ -0,0 +1,48 @@
+package sessions
+
+import (
+ "net/http"
+ "testing"
+)
+
+// Test for GH-8 for CookieStore
+func TestGH8CookieStore(t *testing.T) {
+ originalPath := "/"
+ store := NewCookieStore()
+ store.Options.Path = originalPath
+ req, err := http.NewRequest("GET", "http://www.example.com", nil)
+ if err != nil {
+ t.Fatal("failed to create request", err)
+ }
+
+ session, err := store.New(req, "hello")
+ if err != nil {
+ t.Fatal("failed to create session", err)
+ }
+
+ store.Options.Path = "/foo"
+ if session.Options.Path != originalPath {
+ t.Fatalf("bad session path: got %q, want %q", session.Options.Path, originalPath)
+ }
+}
+
+// Test for GH-8 for FilesystemStore
+func TestGH8FilesystemStore(t *testing.T) {
+ originalPath := "/"
+ store := NewFilesystemStore("")
+ store.Options.Path = originalPath
+ req, err := http.NewRequest("GET", "http://www.example.com", nil)
+ if err != nil {
+ t.Fatal("failed to create request", err)
+ }
+
+ session, err := store.New(req, "hello")
+ if err != nil {
+ t.Fatal("failed to create session", err)
+ }
+
+ store.Options.Path = "/foo"
+ if session.Options.Path != originalPath {
+ t.Fatalf("bad session path: got %q, want %q", session.Options.Path, originalPath)
+ }
+}