В Rails объект сеанса отправляется взад и вперед внутри файлов cookie.
Когда вы задаете session[:user_id] = 3
внутри действия вашего контроллера, ответ, отправленный этим действием, будет иметь заголовок Set-Cookie: my-session-cookie
,Отныне браузер будет автоматически отправлять заголовок Cookie: my-session-cookie
обратно на сервер при каждом запросе.
Вот как обычно выглядит my-session-cookie:
_Hello_session=BAh7B0kiD3%3D%3D--dc40a55cd52fe32bb3b84ae0608956dfb5824689
, что переводится в:
_Hello_session=<encrypted user_id=3>--<digital signature>
Hello
- это название вашего Rails-приложения. - Чтобы злые люди не могли понять строку
a=b
, она зашифрована . - Чтобы злые люди не могли подделать куки, используется цифровая подпись .
Как шифрование (и дешифрование), так и подписание (и проверка)выполняется с использованием секретного ключа на стороне сервера secrets.secret_key_base
, хранящегося в /config/secrets.yml
.