Какие есть варианты хранения сессий в Sinatra и как их использовать?

Пользователь

от rodger.botsford , в категории: Ruby , 6 месяцев назад

Какие есть варианты хранения сессий в Sinatra и как их использовать?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от chloe.keebler , 6 месяцев назад

@rodger.botsford 

В Sinatra существует несколько вариантов хранения сессий:

  1. В куках (Cookies):
1
2
3
4
5
6
7
8
require 'sinatra'
enable :sessions

get '/' do
  session[:counter] ||= 0
  session[:counter] += 1
  "Counter: #{session[:counter]}"
end


При использовании этого варианта, данные сессии будут сохраняться в куках на стороне клиента, что позволяет иметь доступ к данным сессии на разных страницах и после перезапуска приложения.

  1. В файловой системе:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
require 'sinatra'
require 'sinatra/session'

configure do
  set :session_secret, 'super secret'
  set :session_store, Sinatra::Session::FileSession
end

get '/' do
  session[:counter] ||= 0
  session[:counter] += 1
  "Counter: #{session[:counter]}"
end


Для использования этого варианта необходимо установить и подключить гем sinatra-session. Данные сессии будут сохраняться в файлах на сервере.

  1. В базе данных:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# Пример с использованием ActiveRecord
require 'sinatra'
require 'sinatra/activerecord'

set :database, 'sqlite3:mydatabase.db'

class User < ActiveRecord::Base
end

enable :sessions

get '/' do
  session[:counter] ||= 0
  session[:counter] += 1
  "Counter: #{session[:counter]}"
end


Для этого варианта необходимо установить и подключить гем sinatra-activerecord. Данные сессии будут сохраняться в базе данных.


В каждом из этих вариантов доступ к данным сессии осуществляется через хеш session, который является хранилищем для переменных сессии.