事情是这样的,咱们最近开了一个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