zoukankan      html  css  js  c++  java
  • 大叔也说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; }
        }

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

     回到目录

  • 相关阅读:
    声明式事务
    AOP面向切面编程笔记
    IOC容器和Bean的配置实例
    IOC容器和Bean的配置
    nlogn的最长不下降子序列【tyvj1254挑选士兵】
    POJ1703 Find them, Catch them
    [code]poj3349 Snowflake Snow Snowflakes
    hdu 4607 Park Visit 树的直径
    hdu 1520 Anniversary party
    hdu 4863 Centroid of a Tree 树dp
  • 原文地址:https://www.cnblogs.com/lori/p/5073805.html
Copyright © 2011-2022 走看看