一般网站在登录的时候,都会提供一个“记住我”的选项,如果选中该选项,下次就不用重新登录了。
在 Rails 里面实现“记住我”,最简单的办法是设置
Rails.application.config.session_store :cookie_store, expire_after: # 一段相当长的时间
这样 Rails 就会在浏览器里面设置一个要过一段相当长的时间才会过期的 cookie。那么下次访问的时候,一旦检测到这个 cookie 的存在,就不用重新输入密码了。代价是,忘记密码的可能性增加了……
不过,让我们看下反面的问题,如果用户不勾选那个“记住我”,那么怎么来实现 忘了我 这个功能呢?
session_store
的设置是全局的,而且session
类没有提供expires
的设置。cookie
倒是提供了,不过虽然 session 默认是用 cookie 实现的,但是cookie
和session
又不能混用……
另外一个方法是设置一个session[last_login]
,用它来保留上次访问的时间。但是这么一来,每次检查session
里面的内容时,都得检查session[last_login]
,这样做要改动很多地方,而且不易维护(除非把session
包装成 Session 类)。
所以在这里问一下大家,还有什么办法可以动态设置 session 的过期时间的?
BTW,Ruby-china 的编辑框的 markdown 解析有点问题……只有**粗体**
左边是空格的情况下才能 加粗,否则就不能加粗。同样的,*斜体*
、~~删除线~~
也是这样