Skip to main content
 首页 » 编程设计

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

2026年10月29日5lyhabc

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

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

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

这是我的 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 header 。问题是 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