2011-02-25 10 views
5

Un ejemplo de rieles 2.3.8 cookie de sesión es¿Por qué no se puede decodificar por completo una cookie de sesión de Rails?

BAh7BzoLZm9vYmFyaQc6D3Nlc3Npb25faWQiJWIzOTRhNGFkNDg1Mjk2NGM2NDU1Mzc4ZTM0YjkzZjE2--67046ba78aa6d656ec7c64e73aac156f5e503627 

así que supongo que la segunda parte (después de la --) es una suma de comprobación, y si una decodificación base 64 se hace:

$ script/console 
Loading development environment (Rails 2.3.8) 

> Base64.decode64("BAh7BzoLZm9vYmFyaQc6D3Nlc3Npb25faWQiJWIzOTRhNGFkNDg1Mjk2NGM2NDU1Mzc4ZTM0YjkzZjE2") 
=> "\004\b{\a:\vfoobari\a:\017session_id\"%b394a4ad4852964c6455378e34b93f16" 

> puts Base64.decode64("BAh7BzoLZm9vYmFyaQc6D3Nlc3Npb25faWQiJWIzOTRhNGFkNDg1Mjk2NGM2NDU1Mzc4ZTM0YjkzZjE2") 
{: 
    foobari:session_id"%b394a4ad4852964c6455378e34b93f16 

supuestamente foobar debería tener un valor de 2 y no se mostrará ... y para qué sirve session_id si está basado en una cookie, ¿por qué necesita un id?

Respuesta

8

El código después de -- es un SHA, hash con el secreto de sesión definido en la aplicación.

Y here about the ID.

Editar:

Marshal.load(Base64.decode64("BAh7BzoLZm9vYmFyaQc6D3Nlc3Npb25faWQiJWIzOTRhNGFkNDg1Mjk2NGM2NDU1Mzc4ZTM0YjkzZjE2--67046ba78aa6d656ec7c64e73aac156f5e503627".split('--').first)) 

=> {:foobar=>2, :session_id=>"b394a4ad4852964c6455378e34b93f16"} 
+0

por lo que cuando la decodificación, el quitar el '--' y la cadena hexadecimal después de ella. por lo que debería salir bien, ¿no? –

+0

@ 動靜 能量 Sí, y luego debe deserializarlo con Marshal. He editado mi respuesta. – pseidemann

Cuestiones relacionadas