繁体   English   中英

如何在Rails中的JSON响应中包含cookie?

[英]How do I include cookies within a JSON response in Rails?

我正在制作一个基于PhoneGap的iPhone应用程序,它将连接到Rails后端。 我正在使用jQuery为Rails服务器创建Ajax请求。 我成功获得了服务器响应,但我遇到了获取cookie和管理会话的问题。

默认情况下,Rails在响应HTML请求时发送Set-cookie标头。 当Rails向Ajax请求发送JSON响应时,似乎不会发生这种情况。

当向Rails服务器发出Ajax请求时,有没有办法发送Set-cookie头?

这是我在ApplicationController中的内容(我使用Devise进行身份验证):

def sign_in_and_redirect(resource_or_scope, resource=nil)
scope      = Devise::Mapping.find_scope!(resource_or_scope)
resource ||= resource_or_scope
sign_in(scope, resource) unless warden.user(scope) == resource
respond_to do |format|
   format.html {redirect_to stored_location_for(scope) || after_sign_in_path_for(resource) }
   format.json {render :json => { :success => true, :session_id => request.session_options[:id], :current_user => current_user} }
end

这是我用来发出Ajax请求的jQuery函数

$('#user_submit').click(function(){
    $.ajax({beforeSend: function(xhrObj){ xhrObj.setRequestHeader("Accept","application/json");},
      type: 'POST',
      url: 'http://localhost:3000/users/sign_in',
      data: "{'user':{'remember_me':'0','password':'pass1word','email':'email@company.com'}}",
      contentType: "application/json",
      dataType: "application/json",
      complete: function(data, textStatus){
      }
    });
 });

我没有通过谷歌搜索得出一个明确的答案,所以希望你能提供帮助。 我找到了这个,但没有发现它太有帮助:

http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/66751d8e54f2fee6

看起来Rails确实在响应Ajax JSON请求时默认发送Set-cookie头。 问题是Safari不接受cookie,因为它将其视为外部源。 要接受cookie,在本地Safari中测试基于HTML的iPhone应用程序时,您需要将Safari中的安全首选项更改为“接受cookie”至“始终”。

在Phonegap中,您可以通过以下几种方式完成相应的操作:

http://groups.google.com/group/phonegap/browse_thread/thread/3290c5ac4e05be69?fwc=1 http://stackoverflow.com/questions/3709315

我遇到了同样的问题,我无法确认你在答案中所说的话。 当我使用curl两次执行请求时,第一次使用“Accept:text / html”,第二次使用“Accept:application / json”,服务器在后一种情况下不发送Set-Cookie标头。 不幸的是,我还没有想出一个解决方案。

规范说:

“如果用户代理支持HTTP状态
管理它应该保留,丢弃并发送cookie(在Set-Cookie和Set-Cookie2响应头中收到,并在Cookie头中发送)(如果适用)。

由于此规范是候选推荐标准,因此可能尚未在浏览器中一致地实施。 因此,服务器可能会省略设置cookie,我不知道。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM