gorilla/sessions 服务器重新启动之间持续存在?
gorilla/sessions persistent between server restarts?
我有一个关于会话的一般性问题。说到这个话题,我不是很老练。我试过:
NewRediStore (gopkg.in/boj/redistore.v1)
NewCookieStore
NewFileSystemStore
我的印象是会话可以在服务器重启之间持续,因此需要 'store'。虽然我的 golang 后端是 运行,但我能够设置新会话并为多个 users/browsers 检索它们。那里没有问题。
当我重新启动服务器时,我注意到所有会话访问都会导致 session.IsNew == true
。
在 Redis 中,我可以在重新启动后看到所有会话密钥,甚至验证了 .Get
会话结果检索到正确的 ID,但是 IsNew
仍然设置。
我凭直觉猜想,这是有道理的,因为内存中一定有一些映射导致 IsNew
的设置,但我认为如果商店中的 cookie 键有任何命中,IsNew
不应设置。我要疯了吗?我做错了什么容易吗?这是对如何使用会话的根本误解吗?
如果我需要包含代码或其他详细信息,请告诉我。
我会做出与您相同的假设,并且浏览源代码,它看起来应该像您描述的那样工作。您可以尝试调试并单步执行它,尤其是您正在使用的商店的 New
方法(例如 FilesystemStore.New
or RediStore.New
)。如果该方法成功读取 cookie 并在存储中找到会话,根据消息来源,它应该设置 IsNew = false
。
另请注意,仅检查会话 ID 并不是验证此行为的好方法。如果您查看源代码,它会从 cookie 中解码会话 ID, 然后 会尝试在后备存储中查找它。如果查找失败,会话 ID 将匹配,但 IsNew
将是 true
,并且会话中不会有任何值。确保您在会话中设置了一些值并检查它而不是会话 ID。 CookieStore
的行为不同,因为它将会话数据存储在 cookie 本身中。
我有一个关于会话的一般性问题。说到这个话题,我不是很老练。我试过:
NewRediStore (gopkg.in/boj/redistore.v1)
NewCookieStore
NewFileSystemStore
我的印象是会话可以在服务器重启之间持续,因此需要 'store'。虽然我的 golang 后端是 运行,但我能够设置新会话并为多个 users/browsers 检索它们。那里没有问题。
当我重新启动服务器时,我注意到所有会话访问都会导致 session.IsNew == true
。
在 Redis 中,我可以在重新启动后看到所有会话密钥,甚至验证了 .Get
会话结果检索到正确的 ID,但是 IsNew
仍然设置。
我凭直觉猜想,这是有道理的,因为内存中一定有一些映射导致 IsNew
的设置,但我认为如果商店中的 cookie 键有任何命中,IsNew
不应设置。我要疯了吗?我做错了什么容易吗?这是对如何使用会话的根本误解吗?
如果我需要包含代码或其他详细信息,请告诉我。
我会做出与您相同的假设,并且浏览源代码,它看起来应该像您描述的那样工作。您可以尝试调试并单步执行它,尤其是您正在使用的商店的 New
方法(例如 FilesystemStore.New
or RediStore.New
)。如果该方法成功读取 cookie 并在存储中找到会话,根据消息来源,它应该设置 IsNew = false
。
另请注意,仅检查会话 ID 并不是验证此行为的好方法。如果您查看源代码,它会从 cookie 中解码会话 ID, 然后 会尝试在后备存储中查找它。如果查找失败,会话 ID 将匹配,但 IsNew
将是 true
,并且会话中不会有任何值。确保您在会话中设置了一些值并检查它而不是会话 ID。 CookieStore
的行为不同,因为它将会话数据存储在 cookie 本身中。