njnygaard
njnygaard

Reputation: 75

gorilla/sessions persistent between server restarts?

I have a general question about sessions. I am not very seasoned when it comes to this subject. I've tried with:

NewRediStore (gopkg.in/boj/redistore.v1)  
NewCookieStore  
NewFileSystemStore

I was under the impression that sessions could last between server restarts, hence the need for a 'store'. While my golang backend is running, I am able to set new sessions and retrieve them for multiple users/browsers. No problems there.

When I restart my server, I notice that all session access results in session.IsNew == true. In Redis, I can see all the session keys after the restart, and even verified that .Getting the session results in the right ID retrieved, but IsNew is still set.

I guess intuitively, this makes sense because there must be some map in memory that leads to the setting of IsNew but I would think that if there was any hit for the cookie key in the store, IsNew should not be set. Am I going crazy? Is there something easy that I am doing wrong? Is this a fundamental misunderstanding of how to use sessions? Please let me know if I need to include code or additional details.

Upvotes: 4

Views: 857

Answers (1)

Adrian
Adrian

Reputation: 46413

I would have had the same assumptions you did, and browsing the source, it looks like it should work as you described. You might try debugging and stepping through it, particularly the New method for the store you're using (e.g. FilesystemStore.New or RediStore.New). If that method successfully reads the cookie and finds the session in the store, it should set IsNew = false, according to the source.

Also note that just checking the session ID is not a good way of validating this behavior. If you look at the source, it decodes the session ID from the cookie, then tries to look that up in the backing store. If the lookup fails, then the session ID will match, but IsNew will be true and there won't be any values in the session. Make sure you're setting some value in the session and check for that instead of the session ID. The behavior is different for the CookieStore since it stores the session data in the cookie itself.

Upvotes: 1

Related Questions