文章出處

回到目錄

事情是這樣的,我們最近開了一個APP,主要使用xamarin做了一個登陸,它與服務器API進行數據通訊,當用戶名密碼正確去,跳轉到新的activity,并在webview控件中打開服務端的Html5頁面,而h5頁面有些需要進行授權才能訪問,如用戶中心,我的訂單,我的商品等等,而我們的登陸是在原生的activity里實現的,在登陸成功后服務端會向它分配一個SessionID,并存儲在客戶端,以做為下次訪問的標識,而使用webview進行訪問頁面時,這個sessionID和之前的是不同的,所以,在之前的授權是無效的,為了解決這個問題,我們需要讓原生和H5網站的sessionID進行同步!

Login Activity內容

 if (msg.State == "200")
    {
        var ccd = new List<string>(response.Result.Headers.GetValues("Set-Cookie"));
        var arr = ccd[0].Split(new char[] { ';' })[0].Split(new char[] { '=' })[1];
        Toast.MakeText(this, "sessionid=" + arr, ToastLength.Short).Show();
        ConfigData.SessionID = arr;

        Intent intent = new Intent(this, typeof(PageActivity));
        StartActivity(intent);
     }

然后在Page Activity中將這個sessionID寫到對應的域名中

        CookieSyncManager.CreateInstance(this);
            CookieManager cookieManager = CookieManager.Instance;
            cookieManager.SetCookie(GetString(Resource.String.apiHost), "ASP.NET_SessionId=" + ConfigData.SessionID);
            var webView = FindViewById<WebView>(Resource.Id.webView);
            webView.Settings.JavaScriptEnabled = true;
            webView.LoadUrl(api);
            webView.SetWebViewClient(new CustWebViewClient());

在上面的代碼中,我定義了一個全局變量,用來保存當前的sessionID

  public static class ConfigData
    {
        public static string SessionID { get; set; }
    }

 這個對象是靜態的,屬性也是靜態的,這說明它是一個在程序啟動時就會被初始化的對象!

 回到目錄


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()