7
votes

The default session store for Rails is cookie_store. This makes the session be stored on the client side (correct me if I am wrong).

I want to change this default behavior, so that I can store the sessions into Redis database. The posts/articles I found on the Internet, suggests setup a caching store to use redis_cache_store and then for the session_store, to use cache_store.

As I got it, this means that, both caching and sessions will be using the same database (Instance). I don't want that. I want both sessions and cache to use different instances of Redis, so they can be configured accordingly.

I tried to create an initializer file config/initializers/session_store.rb with the following content:

Rails.application.config.session_store :redis_cache_store, key: '_my_app_session'

But this does not work. It gives me the following error:

/application/configuration.rb:324:in `const_get': uninitialized constant ActionDispatch::Session::RedisCacheStore (NameError)

I also found this gem https://github.com/redis-store/redis-store but I am not sure how problematic using this gem can be, since Rails already has a built-in Redis cache store (https://github.com/rails/rails/pull/31134)

1

1 Answers

-2
votes

redis_cache_store is a cache store, you cannot directly use it as a session store. You will have to use redis_cache_store as your default cache_store and then you can use the cache_store for your session_store. Something like this

In your config/application.rb (Read this to know why here)

config.cache_store = :redis_cache_store, options

and then in your config/initializers/session_store.rb

Rails.application.config.session_store = :cache_store, key: '_app_session_key'

There are other options to do this without modifying cache_store as well such as redis-store and redis-session-store