如何为rhomobile/rodes网络视图设置cookie



我正在使用rhomobile/rodes应用程序与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与@params['cookies']中的cookie不匹配,是否有其他方法为ip地址设置cookie?或者我做错了什么,或者这件事目前在罗德斯被打破了?我在android和iphone上都尝试了3.0.0和3.0.1,但它们的行为相同。

发现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。

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

相关内容

  • 没有找到相关文章