【问题标题】:Is there a way to specify subdomains that a cookie should be saved to? (rather than one, or all)有没有办法指定 cookie 应该保存到的子域? (而不是一个,或全部)
【发布时间】:2012-03-01 02:10:43
【问题描述】:

我通过以下方式将会话变量保存到我网站上的所有子域:

Site::Application.config.session_store(
  :cookie_store, 
  :key => '_site_session',
  :domain => Settings.domain,
#  :secure => (Rails.env.production? || Rails.env.staging?), 
  :http_only => true)

其中 Settings.domain = '.site.com'

但是,根据我的网站设置方式,每个帐户都有自己的子域。所以这导致了一个很大的错误,因为当有人登录时,他们可以进入任何其他子域并可以访问该帐户(不是所有信息,而是一些..奇怪的信息)。

所以,我想做的是允许人们与公共子域(signin.site.com 和 signup.site.com)以及他们自己的个人子域(account1.site.com)共享会话变量。但是,这些是唯一应该能够分享它的人。有没有办法指定?

【问题讨论】:

    标签: ruby-on-rails session-variables session-cookies


    【解决方案1】:

    我假设您在像 signin.site.com 这样的子域上处理登录。那么*.site.com是不允许设置cookie的。

    http://site.com 处理身份验证和设置 cookie 应该可以解决问题。

    【讨论】:

    • site.com 已被用作我的营销页面...但我想我可以尝试将其放在 site.com/login 上。但是,会话不会从 site.com 持续到 account1.site.com,因为它是一个不同的子域,而这正是我所需要的。我正在考虑在 application_controller 中创建一个 before_filter 基本上检查 current_account.subdomain == request.subdomain ...但是人们不能更改他们的 current_account 信息来解决这个问题吗?
    • 当 account1.site.com 设置为 .site.com 时,cookie 也会被提供。确保您没有使用 www.site.com。
    • 对不起,我对这个评论感到困惑......你是什么意思?我创建了一个 before_filter 来检查用户是否使用了正确的帐户,有没有办法操纵会话 cookie(我相信是加密的)来尝试访问其他人的帐户?
    • 我的意思是,如果您在site.com/login(不带 www)上登录您的用户,那么 cookie 也应该对 account1.site.com 有效。
    • 但是 cookie 不是也可用于 account2.site.com 吗?这就是我现在遇到的问题。
    猜你喜欢
    • 1970-01-01
    • 2011-04-23
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 2015-10-07
    • 2017-07-07
    • 1970-01-01
    相关资源
    最近更新 更多