Весь этот вопрос основан на совершенно фиктивной предпосылке, которую легко опровергнуть.
get 'cookie_monster/set_cookie'
get 'cookie_monster/eat_cookie'
class CookieMonsterController < ApplicationController
def set_cookie
cookies.permanent.encrypted[:x] = 999
redirect_to action: :eat_cookie
end
def eat_cookie
render plain: "session[:x] is #{session[:x].inspect} not #{ cookies.permanent.encrypted[:x] }"
end
end
require 'test_helper'
class CookieMonsterTest < ActionDispatch::IntegrationTest
test "the session is not the same thing as cookies.encrypted" do
get "cookie_monster/set_cookie"
follow_redirect!
assert_equal "session[:x] is nil not 999", response.body
end
end
Сеанс хранится в отдельном хранилище сеансов ie. По сути, это объект, похожий на ха sh, который сериализуется, а затем десериализуется при каждом запросе.
Когда вы делаете cookies.permanent.encrypted[:user_id]
, вы настраиваете совершенно другого повара ie.