Fra*_*ter 6 air cookies ruby-on-rails http-headers ruby-on-rails-3
我在Rails 3中有一个REST API,有时可以从AIR应用程序访问,有时也可以从浏览器访问.
我认为这是一个Rails 3问题,但它可能是一个Flex/AIR问题.
Rails应用程序使用omniauth进行身份验证,使用cancan进行授权,使用active_record_store.我使用会话模型来存储用户的身份.
(有一个原因我没有使用cookie会话,与AIR for Android,OAuth和StageWebView有关.)
我正在使用Charles来监控HTTP流量.
大多数请求工作正常.浏览器(或AIR客户端)使用Cookie http标头将会话ID发送到服务器,如下所示:
_session_id=950dee7eca6732aa62b5f91876f66d15
Run Code Online (Sandbox Code Playgroud)
并且Rails找到会话,确定用户是谁,并做其事.
但在某些情况下,Rails会在发送响应之前生成新会话.它向会话表添加会话,并使用新的会话ID 向客户端返回Set-Cookie标头.像这样:
_session_id=e1489a6b610c0a1d13cec1454228ae47; path=/; HttpOnly
Run Code Online (Sandbox Code Playgroud)
发生这种情况的情况是:
这显然是一个问题,因为在后续请求中,Rails无法找到用户信息.它创建了一个没有该信息的新会话.
所以我正在查看POST请求的HTTP头.这是Charles的复制/粘贴; 我在标题名称后插入冒号以使其可读.
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
Run Code Online (Sandbox Code Playgroud)
有没有人对Rails在这种情况下会产生新会话的原因有任何见解?它似乎是在我的控制器代码执行后发生的,因为我在控制器中有正确的会话信息.
我正忙着尝试进一步隔离问题,控制AIR内的标题,等等.我已经在这个bug上工作了将近一个星期.因此,非常感谢社区的任何见解或建议.
只是一个猜测,但似乎你没有带来Rails为所有基于POST的请求生成的CSRF令牌:
http://guides.rubyonrails.org/security.html#cross-site-request-forgery-csrf
| 归档时间: |
|
| 查看次数: |
2067 次 |
| 最近记录: |