大叔也说Xamarin~Android篇~原生登陆与WebView的网站如何共享Session

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大叔也说Xamarin~Android篇~原生登陆与WebView的网站如何共享Session相关的知识,希望对你有一定的参考价值。

原文:大叔也说Xamarin~Android篇~原生登陆与WebView的网站如何共享Session

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

 这个对象是静态的,属性也是静态的,这说明它是一个在程序启动时就会被初始化的对象!

 

以上是关于大叔也说Xamarin~Android篇~原生登陆与WebView的网站如何共享Session的主要内容,如果未能解决你的问题,请参考以下文章

带有原生 Android 工具栏的 Xamarin 表单

Xamarin.Forms 3.1.0+版本 Android 原生支持底部导航栏啦

如何从xamarin表单应用程序中的PCL项目访问android原生布局文件?

可以使用 Xamarin 为原生 iOS 和 Android 应用程序创建客户端 sdk 吗?

Xamarin 为原生开发者构建跨平台 sdk

如何在Xamarin中快速集成Android版认证服务-邮箱地址篇