2011-06-02 77 views
1

我使用rhomobile/rhodes應用程序與Web服務進行通信並在WebView中顯示內容,當我在Rho :: AsyncHttp.post中發送登錄信息時登錄詳細信息和回調,我可以看到Web服務上的成功登錄,並且應用程序獲取我可以放入和查看的cookie。到現在爲止還挺好。如何爲rhomobile/rhodes webview設置cookie

然而,接下來的事情我嘗試是使用cookie來驗證的WebView,所以在回調:

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

但我重定向到登錄頁面。發送的cookie與@params['cookies']中的cookie不匹配,是否有其他方法可以爲ip地址設置Cookie?或者我做錯了什麼,或者此時羅得島的這種情況已經破裂?我嘗試3.0.0和3.0.1爲Android和iPhone和他們有相同的行爲。

回答

2

原來WebView.set_cookie目前不爲3.0.1工作,但你可以設置Cookie在JavaScript ...這是黑客我結束了,似乎工作:

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。

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