webView中设置cookie无效

来源:互联网 发布:ps pc版和mac版差别 编辑:程序博客网 时间:2024/05/24 05:31

webView中设置cookie无效

最近用webView里面要同步Cookies,但是只同步url了,所以在此页面请求其他服务的接口时候,cookie就没有同步成功。这是为啥呢

还原问题

打开 h5.caocao.com
然后在打开 yuwen.caocao.com
然后请求接口 shuxue.caocao.com


一般同步cookie 的方法

/**  * 同步一下cookie  */  public static void synCookies(Context context, String url) {      CookieSyncManager.createInstance(context);      CookieManager cookieManager = CookieManager.getInstance();      cookieManager.setAcceptCookie(true);      cookieManager.removeSessionCookie();//移除      cookieManager.setCookie(url, cookies);//cookies是在HttpClient中获得的cookie      CookieSyncManager.getInstance().sync();  } 

在android里面在调用webView.loadUrl(url)之前一句调用此方法就可以给WebView设置Cookie
注:这里一定要注意一点,在调用设置Cookie之后不能再设置

webView.getSettings().setBuiltInZoomControls(true);  webView.getSettings().setJavaScriptEnabled(true);  

上述是我在其他博客中抄过来的,当然将的非常对。

那么问题就来,那么按照上诉的方法为啥就不行了。
原因出现在这里上述方法需要将每次请求的url都要同步一遍,如果要请求接口也要同步,这样就麻烦了,还要监听打开页面和请求的回调,太麻烦了

其实问题是 不了解相关的概念


域名

Google.com baidu.com 163.com
这些如果加入www.baidu.com,则不是域名了

拿http://mail.163.com/index.html 举个栗子

  1. Http:// 这个是协议,也是HTTP 超文本传输协议,也就是网页在网上传输协议。
  2. mail 这个是服务器名,代表一个邮箱服务器
  3. 163.com 这个是域名,是用来定位网站的独一无二的名字
  4. mail.163.com这个是网站的名字,服务器名+域名 组成
  5. / 这个是根目录,通过网站名找服务器,然后再服务器下存放根目录
  6. Index.html 这个是根目录下的默认网页
  7. http://mail.163.com/index.htm 这个是url,统一资源定位符,全球性地址,用于定位网络上的资源

再举个通俗的栗子

比如有个大学,名字叫曹操,那么大学的名字就是 caocao.com
然后大学里面有语文系,那么语文系的名字是:yuwen.caocao.com
然后又有数学系,那么数学系的名字是:shuxue.caocao.com


cookie的设置和读取范围

HTTP请求域名 一级域名 cookie可设置(并可读取)的范围 cookie不可设置 cookie不可读取 caocao.com caocao.com caocao.com .caocao.com www.caocao.com www.caocao.com www.caocao.com caocao.com www.caocao.com .www.caocao.com .caocao.com caocao.com caocao.com yuwem.caocao.com caocao.com yuwen.caocao.com .yuwen.caocao.com .caocao.com caocao.com caocao.com

通过上诉了解到,其实一个域名问题,只要在一个域名下,设置对应的cookie即可,例如:设置Cookie 时将url替换为 .caocao.com

注意,设置cookie时,是 .caocao.com ,记住前面有个点

1 0
原创粉丝点击