1

我正在使用 rhomobile/rhodes 应用程序与 Web 服务通信并在 WebView 中显示内容,当我在 Rho::AsyncHttp.post 中发送登录信息以及登录详细信息和回调时,我可以看到成功登录Web 服务和应用程序获取我可以放置和查看的 cookie。到目前为止,一切都很好。

但是,接下来我尝试使用该 cookie 来验证 WebView,因此在回调中:

WebView.set_cookie("10.0.1.190", @params['cookies'])
WebView.navigate("10.0.1.190")

但这会将我重定向到登录页面。发送的 cookie 与中的 cookie 不匹配@params['cookies'],是否有其他方法可以为 ip 地址设置 cookie?还是我做错了什么,或者目前这是否在罗德中被破坏了?我为 android 和 iphone 尝试了 3.0.0 和 3.0.1,它们的行为相同。

4

2 回答 2

2

事实证明 WebView.set_cookie 目前不适用于 3.0.1,但您可以在 javascript 中设置 cookie ......这是我结束的黑客似乎有效:

def login
  WebView.navigate("http://www.mysite.com/blank.html")
  Rho::AsyncHttp.post(
    :url => "http://www.mysite.com/login?user[username]=joeblow&user[password]=supersecret",
    :callback => url_for(:action => :login_callback)
  )
  render :action => :wait
end

def login_callback
  WebView.execute_js("document.cookie='#{@params["cookies"]};expires=Fri, June 10 12:00:00 UTC;path=/;domain=.mysite.com'")
  WebView.navigate("http://www.mysite.com")
end

blank.html 只是一个空文件,可以在不设置任何 cookie 的情况下加载 WebView。

于 2011-06-07T16:13:57.673 回答
2

这就是在不使用 js 的情况下对我有用的方法。我想这可能是因为我添加了多个 cookie,所以我最终在回调中一个一个地添加它们,而不是一次添加它们。

  def login
      WebView.navigate("http://www.mysite.com/blank.html")
      Rho::AsyncHttp.post(
        :url => "http://www.mysite.com/login?user[username]=joeblow&user[password]=supersecret",
        :callback => url_for(:action => :login_callback)
      )
      render :action => :wait
    end



    def login_callback

        cookies = @params["cookies"].split(';');

            cookie_str = ""
                cookies.each do |c|
                    c = c + ';'
                    WebView.set_cookie("10.0.1.190", c)
                end
         WebView.navigate("http://www.mysite.com")

    end
于 2012-10-09T15:09:52.770 回答