Чтобы старые сеансы работали, необходимо, чтобы приложение считывало данные с обоих ключей, а записывало только новые. Этот подход использовался rails при переключении с маршализованных сессий на режим json (:hybrid
)
Что-то вроде этого должно происходить (не проверялось, версия вашей стойки может отличаться, поэтому лучше придумать ваш вариант):
class MyHybridStore < ActionDispatch::Session::ActiveRecordStore
# this lives in Rack::Session::Abstract::Persisted (this is modified from rack 2.1.2, yours may differ)
def unpacked_cookie_data(request)
request.fetch_header(RACK_SESSION_UNPACKED_COOKIE_DATA) do |k|
# the trick:
session_data = request.cookies[@key].presence || request.cookies['_abc_session']
if @secrets.size > 0 && session_data
session_data, _, digest = session_data.rpartition('--')
session_data = nil unless digest_match?(session_data, digest)
end
request.set_header(k, coder.decode(session_data) || {})
end
end
end
MyApp::Application.config.session_store MyHybridStore, key: '_xyz_session'