Estou trabalhando em um aplicativo Rails que usa ActiveRecord::SessionStore para gerenciamento de sessão. Durante a depuração, notei um comportamento interessante em relação ao session_id. Aqui está o que encontrei:
O session_id no cookie do usuário se parece com isto:
a5ef128d435c9c14f86450b0860d424
Entretanto, no banco de dados (tabela de sessões), o session_id é armazenado em um formato hash com um prefixo:
2::3d05cf25eccf392f19e0049fa0f302a7bd4575a3b3daea9a2cde3173f723f7a0
Entendo que a parte depois de 2:: é um hash SHA-256 do valor do cookie (session_id), mas estou curioso sobre o prefixo (2::):
- O 2:: significa uma versão específica do mecanismo de criptografia ou hash da sessão?
- Esse comportamento está documentado em algum lugar no Rails ou na gem ActiveRecord::SessionStore?
Veja como estou tentando recuperar a sessão no meu código:
current_user_id = lambda { |request|
session_id = request.cookie_jar["_session_id"]
return unless session_id.present?
encrypted_session_id = "2::#{Digest::SHA256.hexdigest(session_id)}"
session = ActiveRecord::SessionStore::Session.find_by(session_id: encrypted_session_id)
session&.data&.fetch('user_id', nil)
}
Isso funciona como esperado, mas tenho uma preocupação: se o prefixo 2:: mudar, meu código quebrará.
Quaisquer informações ou indicações sobre documentação seriam muito apreciadas!