Ruby on rails 会议';在Rails中的存储和过期

Ruby on rails 会议';在Rails中的存储和过期,ruby-on-rails,ruby,Ruby On Rails,Ruby,我是Ruby/Rails新手,我对Rails中的会话机制以及整个会话有一些疑问 我读过Rails 4中的会话机制使用cookie作为 默认存储。这是真的吗 据我所知,会话在 关闭浏览器。我可以手动更改过期时间吗 提前谢谢 是,会话默认存储在cookie中。如果您在config/initializers/下查看,您将发现一个session\u store.rb文件,其中包含以下内容 Appname::Application.config.session_store :cookie_store, k

我是Ruby/Rails新手,我对Rails中的会话机制以及整个会话有一些疑问

  • 我读过Rails 4中的会话机制使用cookie作为 默认存储。这是真的吗
  • 据我所知,会话在 关闭浏览器。我可以手动更改过期时间吗

  • 提前谢谢

    是,会话默认存储在cookie中。如果您在
    config/initializers/
    下查看,您将发现一个
    session\u store.rb
    文件,其中包含以下内容

    Appname::Application.config.session_store :cookie_store, key: '_appname_session'
    
    就覆盖此行为而言,您可以创建自定义cookie并将其过期日期设置为您想要的时间。一般来说,这就是创建身份验证时处理用户会话的方式。例如:

      def sign_in(user)
        cookies[:session_token] =  { value: user.session_token, expires: 1.day.from_now }
        self.current_user = user
      end
    

    然后使用该cookie持久化用户会话。

    是的,默认情况下会话存储在cookie中。如果您在
    config/initializers/
    下查看,您将发现一个
    session\u store.rb
    文件,其中包含以下内容

    Appname::Application.config.session_store :cookie_store, key: '_appname_session'
    
    就覆盖此行为而言,您可以创建自定义cookie并将其过期日期设置为您想要的时间。一般来说,这就是创建身份验证时处理用户会话的方式。例如:

      def sign_in(user)
        cookies[:session_token] =  { value: user.session_token, expires: 1.day.from_now }
        self.current_user = user
      end
    

    然后使用该cookie来持久化用户会话。

    您可以使用初始化器中的
    expire\u after设置超时

    My::Application.config.session_store :active_record_store, {
      key: "session_id",
      domain: "domain.com",
      expire_after: 12.hours,
    }
    

    您可以使用初始化器中的
    expire\u after
    设置超时

    My::Application.config.session_store :active_record_store, {
      key: "session_id",
      domain: "domain.com",
      expire_after: 12.hours,
    }
    
  • 这两项都可以在
    config/initializers/session\u store.rb
    中设置。例如:

    MyApp::Application.config.session_store :cookie_store,
                                            :key => '_my_app_session',
                                            :expire_after => 30.minutes
    
  • 这两项都可以在
    config/initializers/session\u store.rb
    中设置。例如:

    MyApp::Application.config.session_store :cookie_store,
                                            :key => '_my_app_session',
                                            :expire_after => 30.minutes
    

    +1如果OP希望不同会话的到期时间不同,则此方法有效。如果要为所有会话设置全局过期时间,最好在session_store.rb中设置。是的,我看到了。事实上,直到看到你的答案我才知道+我也是!另外-我想为“登录”选项存储用户\u id-此值将使用session\u store.rb中的密钥加密,不是吗?我建议不要存储
    id
    。创建一个唯一的令牌并存储它,因为如果一个人有足够的决心,加密可能会被破坏。使用用户
    id
    可能会允许有人入侵任何用户的会话。最好创建一个随机令牌。+1如果OP希望不同会话的到期时间不同,则此选项有效。如果要为所有会话设置全局过期时间,最好在session_store.rb中设置。是的,我看到了。事实上,直到看到你的答案我才知道+我也是!另外-我想为“登录”选项存储用户\u id-此值将使用session\u store.rb中的密钥加密,不是吗?我建议不要存储
    id
    。创建一个唯一的令牌并存储它,因为如果一个人有足够的决心,加密可能会被破坏。使用用户
    id
    可能会允许有人入侵任何用户的会话。最好创建一个随机令牌。