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

これは、jsを使用せずに私のために働いたものです。おそらく複数のCookieを追加していたためだと思います。そのため、コールバックで一度にすべてのCookieを追加するのではなく、1つずつ追加することになりました。

  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 に答える
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 に答える