Rails 中会话变量存储在哪里?
硬盘、主内存或其他地方。我不是要求这些存储在数据库中的情况。
hard disk, main memory or somewhere else. I am not asking for the case where these are stored in database.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
默认情况下,rails 使用 cookie 来存储会话数据。所有数据都存储在客户端,而不是服务器上。
By default rails uses cookies to store the session data. All data is stored in the client, not on the server.
我建议您查看 rails 安全指南的会话章节 - 它回答了您的问题详细说明并将帮助您了解其工作原理。
I suggest you to take a look into sessions chapter of rails security guide - it answers your question in detail and will help you to understand how it works.
在Rails 中,会话对象在cookie 内来回发送。
当您在控制器操作内设置
session[:user_id] = 3
时,从该操作发送的响应将具有标头Set-Cookie: my-session-cookie
。从现在开始,浏览器将在每次请求时自动将标头
Cookie: my-session-cookie
发送回服务器。这是 my-session-cookie 通常的样子:
翻译为:
Hello
是 Rails 应用程序的名称。理解
a=b
字符串,它是加密的。为了防止人们篡改cookie,使用数字签名。
加密(和解密)和签名(和验证)都是使用存储在
/config/secrets.yml
中的服务器端密钥secrets.secret_key_base
完成的。In Rails, session object is sent back and forth inside cookies.
When you set
session[:user_id] = 3
inside of your controller action, the response sent from that action will have a headerSet-Cookie: my-session-cookie
.From now on browser will automatically send a header
Cookie: my-session-cookie
back to server on every request.This is how my-session-cookie usually looks:
which translates into:
Hello
is the name of your Rails app.understanding
a=b
string, it's encrypted.people from tampering cookies, digital signature is used.
Both encryption (and decryption), and signing (and verifying) are done using a server-side secret key
secrets.secret_key_base
stored in/config/secrets.yml
.