Ruby on rails 了解Web会话id WRT rails

Ruby on rails 了解Web会话id WRT rails,ruby-on-rails,session-cookies,crystal-lang,kemal,Ruby On Rails,Session Cookies,Crystal Lang,Kemal,我正在研究一种在Rails应用程序和应用程序之间传输会话的方法。我现在可以手动完成这项工作,但这允许扩展会话的处理方式。我已经开始了 我的问题是,当我从rails解密会话cookie值时,我得到一个包含session\u id密钥的散列,其中包含一些值,如0cc175b9c0f1b6a831c399e269772661。此会话\u id是如何生成的?当我扩展引擎时,这是否与我需要传递的会话id相同?或者整个会话cookie值会被视为“id” 下面是一个在rails中如何解密的示例: secret

我正在研究一种在Rails应用程序和应用程序之间传输会话的方法。我现在可以手动完成这项工作,但这允许扩展会话的处理方式。我已经开始了

我的问题是,当我从rails解密会话cookie值时,我得到一个包含
session\u id
密钥的散列,其中包含一些值,如
0cc175b9c0f1b6a831c399e269772661
。此
会话\u id
是如何生成的?当我扩展引擎时,这是否与我需要传递的会话id相同?或者整个会话cookie值会被视为“id”

下面是一个在rails中如何解密的示例:

secret_key_base = "a0aaa0a00a000a00a0a0aa00a0aa000a000aa0a0a0a0a0000a0000a00aaa00000000aa0aa00000000a00000a000a000000a00aaa0a0000000a0000a0a0aaa000"
key_generator = ActiveSupport::CachingKeyGenerator.new(ActiveSupport::KeyGenerator.new(secret_key_base, iterations: 1000))
secret = key_generator.generate_key("encrypted cookie")
sign_secret = key_generator.generate_key("signed encrypted cookie")
encryptor = ActiveSupport::MessageEncryptor.new(secret, sign_secret, serializer: JSON)
hash = encryptor.decrypt_and_verify("SOME_REALLY_LONG_STRING")
puts hash["session_id"] #=> 0cc175b9c0f1b6a831c399e269772661
编辑(澄清):我目前有两个rails应用程序在它们之间共享会话。我的目标是用kemal应用程序替换rails应用程序之一。我目前在rails->kemal上做这个,但是去kemal->rails不行


rails如何生成
session\u id
值?我是否应该在kemal中以相同的方式生成此值?

从和开始主题。基本上,ID是一个哈希,用于标识具有会话存储的唯一会话-默认情况下是
EncryptedCookieStorage
。如果我在你那里,我会避免使用会话,如果可能的话,使用基于令牌的系统。太好了!谢谢你的链接。我会仔细阅读的。我试图实现的目标是将rails应用程序替换为kemal应用程序,在kemal应用程序中,我有两个rails应用程序共享相同的密钥和会话。我想做一个令牌身份验证,但我希望它是无缝的。嗯,在这种情况下,您需要将会话存储切换到Memcached/Redis。这样,您就可以在Rails和Kemal上使用会话id cookie,并使其指向相同的内存存储。它可以让你绕过整个cookie加密问题。(至少对商店来说是这样)。“会话ID是使用SecureRandom.hex生成的,SecureRandom.hex使用特定于平台的方法(如OpenSSL、/dev/uradom或Win32)生成一个随机十六进制字符串,以生成加密安全的随机数。目前无法强制Rails的会话ID。”从主题的和开始。基本上,ID是一个散列,用于标识具有会话存储的唯一会话-默认情况下是
EncryptedCookieStorage
。如果我在你那里,我会避免使用会话,如果可能的话,使用基于令牌的系统。太好了!谢谢你的链接。我会仔细阅读的。我试图实现的目标是将rails应用程序替换为kemal应用程序,在kemal应用程序中,我有两个rails应用程序共享相同的密钥和会话。我想做一个令牌身份验证,但我希望它是无缝的。嗯,在这种情况下,您需要将会话存储切换到Memcached/Redis。这样,您就可以在Rails和Kemal上使用会话id cookie,并使其指向相同的内存存储。它可以让你绕过整个cookie加密问题。(至少对商店来说是这样)。“会话ID是使用SecureRandom.hex生成的,SecureRandom.hex使用特定于平台的方法(如OpenSSL、/dev/uradom或Win32)生成一个随机十六进制字符串,以生成加密安全的随机数。目前无法强制Rails的会话ID。”