在发送一组AJAX请求时使用会话

时间:2014-06-19 18:09:34

标签: ruby-on-rails ajax session ruby-on-rails-4

在我的Rails应用程序中,我立即进行一组AJAX调用,这会导致为每个请求发送相同的会话cookie。 问题是rails在每个响应中设置了新的会话cookie,因此它希望在请求之后的cookie值。

我正在寻找服务器端解决方案,因为我不想将这些请求链接起来(它们非常耗时)。

是否可以改变这种行为?它会带来哪些安全隐患?

(我使用Rails 4.1.0)

非常感谢

1 个答案:

答案 0 :(得分:2)

如果用户还没有会话cookie,那么你无能为力。

如果您可以保证用户已经有会话(例如,如果您要求用户登录),那么您可以使用服务器端会话存储执行此操作。

对于服务器端会话存储,会话cookie只包含一个标识符 - 即使重叠的ajax请求更改了会话中的值,它们也不会更改会话cookie。通常,这是更好的安全性:例如,在用户注销后无法重放旧会话。出于性能原因,默认情况下Rails切换到cookie存储区:不需要访问外部数据存储(但是它会略微增加每个请求发送的数据量)

切换到服务器端会话存储是不够的,但仍然让你对竞争条件开放。很容易得到一行

的序列
  • 请求加载会话
  • 请求B加载会话
  • 请求B完成,保存会话
  • 请求A保存会话并覆盖B
  • 所做的会话更改

您需要一个会话存储,它将尝试合并它所做的任何更改以及其他请求可能发生的任何更改。

我前段时间写了这样一个session store。我还没有为rails 4更新它,因为它不再是我需要的东西,但你可以(或者至少在其中找到灵感)