2

我有一个通过 HTTP 提供的网站,在Heroku上有一个自定义域(例如 mywebsite.com) 。

当用户想要登录时,我通过 HTTPS 将他们重定向到我的 Heroku 应用程序的非自定义 URL(使用Piggyback SSL,因为我很便宜并且不想为SSL Endpoint付费)。

然后,在他们登录后,我将用户重定向回我的自定义域,因为他们的流量不再需要加密。

唯一的问题是,在重定向它们之前,我使用flash[:notice](with sinatra-flash ) 显示一条消息(例如,“您已成功登录!” )。但我相信,由于用户在此过程中从一个域跨越到另一个域,尽管仍在同一台服务器上,但他们看不到该消息,因为无法从域 Y 访问来自域 X 的会话数据。

  • 我对问题的理解正确吗?
  • 修复它的正确方法是什么?

2012-10-12 更新

所以,我最终采用的解决方案有点老套:

首先,我添加了一个新的数据模型,OneTimeFlash其中token包含一个包含每个记录的随机字符串的字段。然后我做了它,以便在用户登录域 X 后,我创建一个新OneTimeFlash实例并使用查询字符串中的令牌重定向到域 Y:

# The model automatically generates a token before being created.
one_time_flash = OneTimeFlash.create(:message => "You've successfully logged in!")
redirect "#{DOMAIN_Y}/flash/#{one_time_flash.token}"

然后当服务器在请求中检测到这个令牌时,它会显示 flash:

get "/flash/:token" do |token|
  one_time_flash = OneTimeFlash.first(:token => token)
  flash[:notice] = one_time_flash.message unless one_time_flash.nil?
  one_time_flash.destroy
  redirect "/
end

(ORM 是DataMapper,以防有人感到困惑。)

就像我说的:它很hacky,但它有效。谁能想到这种方法有什么严重的问题?

4

1 回答 1

0

在这种情况下,您不能在域之间使用 flash,因为 flash 只为下一个请求保存。

你可以使用 HTML5 localstorage -一些随机的 localstorage 解释html5 localstorage 上的 w3schools 网站

于 2012-10-12T16:21:44.533 回答