V2.0: Sessions

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

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

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

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.