gpt4 book ai didi

ruby-on-rails - Rails 3 正在从 AIR 更改 POST 上的 session ID

转载 作者:行者123 更新时间:2023-12-04 07:37:46 27 4
gpt4 key购买 nike

我在 Rails 3 中有一个 REST API,有时从 AIR 应用程序访问,有时从浏览器访问。

我认为这是一个 Rails 3 问题,但它可能是一个 Flex/AIR 问题。

Rails 应用程序使用 omniauth 进行身份验证,使用 cancan 进行授权,并使用 active_record_store。我使用 session 模型来存储用户的身份。

(我不使用 cookie session 是有原因的,这与 AIR for Android、OAuth 和 StageWebView 相关。)

我正在使用 Charles 来监控 HTTP 流量。

大多数请求工作正常。浏览器(或 AIR 客户端)使用 Cookie http header 将 session ID 发送到服务器,如下所示:

_session_id=950dee7eca6732aa62b5f91876f66d15

Rails 找到 session ,找出用户是谁,然后做它的事情。

但在某些情况下,Rails 会在发送响应之前生成一个新 session 。它将 session 添加到 session 表中,并使用新的 session ID 向客户端返回一个 Set-Cookie header 。像这样:
_session_id=e1489a6b610c0a1d13cec1454228ae47; path=/; HttpOnly

发生这种情况的情况是:
  • 请求来自 AIR 客户端
  • 请求是一个 POST

  • 这显然是一个问题,因为在后续请求中,Rails 找不到用户信息。它创建了一个没有该信息的新 session 。

    所以我正在查看 POST 请求的 HTTP header 。这是查尔斯的复制/粘贴;我在标题名称后插入了冒号以使其可读。
    Host: localhost.seti.hg94.com:3000
    Content-Type: application/x-www-form-urlencoded
    User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en) AppleWebKit/531.9 (KHTML, like Gecko) AdobeAIR/2.6
    Referer: app:/AndroidApplication.swf
    X-Flash-Version: 10,2,152,22
    Accept: */*
    Accept-Language: en-us
    Accept-Encoding: gzip, deflate
    Cookie: _session_id=950dee7eca6732aa62b5f91876f66d15
    Content-Length: 84
    Connection: keep-alive

    有没有人知道为什么 Rails 在这种情况下会生成一个新 session ?这似乎是在我的 Controller 代码执行后发生的,因为我在 Controller 中有正确的 session 信息。

    我正忙于进一步隔离问题,从 AIR 内部控制标题,等等。我已经在这个错误上工作了将近一个星期。因此,我们将不胜感激来自社区的任何见解或建议。

    最佳答案

    只是一个猜测,但似乎您没有使用 Rails 为所有基于 POST 的请求生成的 CSRF token :

    http://guides.rubyonrails.org/security.html#cross-site-request-forgery-csrf

    关于ruby-on-rails - Rails 3 正在从 AIR 更改 POST 上的 session ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5187582/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com