事情是這樣的,咱們最近開了一個APP,主要使用xamarin作了一個登錄,它與服務器API進行數據通信,當用戶名密碼正確去,跳轉到新的activity,並在webview控件中打開服務端的Html5頁面,而h5頁面有些須要進行受權才能訪問,如用戶中心,個人訂單,個人商品等等,而咱們的登錄是在原生的activity裏實現的,在登錄成功後服務端會向它分配一個SessionID,並存儲在客戶端,以作爲下次訪問的標識,而使用webview進行訪問頁面時,這個sessionID和以前的是不一樣的,因此,在以前的受權是無效的,爲了解決這個問題,咱們須要讓原生和H5網站的sessionID進行同步!html
Login Activity內容web
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寫到對應的域名中api
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; } }
這個對象是靜態的,屬性也是靜態的,這說明它是一個在程序啓動時就會被初始化的對象!cookie