Rails Session 和 Cookie 的问题

Peter · 2013年06月20日 · 最后由 Peter 回复于 2013年06月20日 · 6915 次阅读

在 PHP 中,Session 是存在服务器上的,可以是文件形式,也可以通过函数得到信息存在数据库中。程序员可以定义一个变量 test,存在 Session 里面,随时可以读取,修改。

$_SESSION['test'] = 42;

Cookie 是存在浏览器中,也是类似操作。

$_COOKIE['test'] = 42;

我可以把用户密码的 hash 值加密后存在 cookie 里,等用户 session 失效后,我读取 cookie, 解密得到 hash 值,与数据库中这个用户密码的 hash 比较,如果一致,在 session 中将其标为已经登录。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

在 Rails 中,

http://railstutorial-china.org/chapter8.html 大家在这页搜索一下:

session[:remember_token] = user.id

为什么这里说:session 对象把用户 id 保存在浏览器的 cookie 中,这样在网站的所有页面就都可以使用了。

Session 不是一直存在服务器中吗,怎么会保存在浏览器的 cookie 中?

我一直对 Rails 里面操作 cookie 和 session 的问题有疑问。有没有哪位好心人给我解释一下。

Rails 中 Session 的存放位置有多种选择,默认存在 Cookie 中。你可以在项目的 config/initializers/session_store.rb 文件中进行设置。

#1 楼 @chechaoyang 谢谢! 如果生成一个验证码的时候,我会把正确的值写在 session 里面,这样用户端是不知道的。

如果我把 session 的信息写在 cookie 里,那还要把信息加密存进去,

跟用户输入的验证码比较的时候,还要先从 cookie 读取加过密过 session 的信息,解密,再比较。

这样岂不是要来来回回地要在服务器和用户之前多传很多数据。

#2 楼 @Peter 这些过程对你来说都是透明的,你只要按照之前的方式继续使用你的 session 就可以了,框架会处理一切

#2 楼 @Peter 虽然 Rails 提供了很多种 Session 的存储方案,但是无论以什么方式保存,session 数据对于用户来说是不可见的(cookie based session 对用户来说也是无法直接读取内容的)。

在服务器端,Session 的序列化和反序列化都是透明的,所以你大可放心大胆的把验证码的数值放到 session 中,在 Action 中直接去比对用户提交的数值和 session 中的数值是否一致。

#4 楼 @lgn21st #3 楼 @chinakr

Rails 养懒人啊,你们幸福多久了?!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号