Sessions are disabled by default. To enable sessions, add a config like the following to your app:
# config/app.rb
module Bookshelf
class App < Hanami::App
config.actions.sessions = :cookie, {
key: "bookshelf.session",
secret: settings.session_secret,
expire_after: 60*60*24*365
}
end
end
For this to work, you will need to add a session_secret
to your app settings. See settings for more details.
# config/settings.rb
module Bookshelf
class Settings < Hanami::Settings
setting :session_secret, constructor: Types::String
end
end
Using sessions
With sessions enabled, actions can set and read values from the session using the response
and request
objects.
module Bookshelf
module Actions
module Books
class Index < Bookshelf::Action
def handle(request, response)
# Setting a value in the session
response.session[:user_id] = 1
# Reading a value from the session
request.session[:user_id] # => 1
# Removing a value from the session
request.session[:user_id] = nil
end
end
end
end
end
Session adapters
When configuring sessions, the first argument of the configuration is the adapter to use for session storage.
Specifying :cookie
, as above, will use Rack::Session::Cookie
for the session storage.
The name of the session adapter is the underscored version of the class name under Rack::Session
namespace. Example: :cookie
for Rack::Session::Cookie
.
To use a different adapter, for example :redis
, add the redis-rack
gem and specify the adapter as :redis
.
Custom storage technologies can be loaded via require "rack/session/#{ adapter_name }"
.
The second argument passed to sessions
is a hash of options to be passed to the chosen adapter.