🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
在项目开发中遇到一个问题,就是在登录界面向服务器发送登录请求后,然后就跳到一个与用户订阅有关的界面,然后,我想服务器发送的是正确的Url,用Log打印出返回结果,但是只有一个html的元素信息。通过对这个html的元素信息发的分析,与后台同事分析发现,我的url没有cookie 信息。在登录界面向服务器发送的登录验证信息,但是服务器没有存储相应的用户信息,就导致我登录进去后向服务器索要用户相关信息时,服务器判断是一个新用户,就返回了一个登录界面hxml给我。所以就出现了开头那个问题,那么怎样才能解决这个问题呢,在网上查了很多资料,本人发现了一个简单易用的方法,那就是用cookieManager来管理cookie。下面就是使用步骤; 1、首先  在android应用程序开始的activity中的oncreaty()方法中注册cookiemanager。如下: ~~~ <span style="font-size:18px;">//设置网络请求cookie CookieSyncManager.createInstance(this);</span> ~~~ 2、然后在到网络请求的那个类中设置如下  设置和获取cookie的方法 ~~~ <span style="font-size:18px;"> protected String getCookie() { CookieManager cookieManager = CookieManager.getInstance(); String cookie = cookieManager.getCookie("cookie"); if (cookie != null) { return cookie; } else { return ""; } } protected void setCookie(String cookie) { CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setCookie("cookie", cookie); }</span> ~~~   3、最后一步就在urlConnection.openConnectin()的后面设置如下方法: ~~~ uc = (HttpURLConnection) new URL(url + "?" + paramsStr.toString()).openConnection(); uc.setRequestProperty("Cookie", getCookie()); ~~~ ~~~ <pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:'宋体';font-size:12.0pt;"><span style="background-color:#344134;">setCookies</span>(uc.getHeaderFields())<span style="color:#cc7832;">;</span> ~~~ ~~~ ~~~ 好了到这里就完成了cookie的设置 3. 过期按需处理一下 附1:cookie的获取 ~~~ response.headerFields = conn.getHeaderFields(); setCookies(response.headerFields); ~~~ ~~~ /** * 存储cookie * @param headerFields */ protected void setCookies(Map<String, List<String>> headerFields) { if (null == headerFields) { return; } List<String> cookies = headerFields.get(COOKIES_KEY); if (null == cookies) { return; } for (String cookie : cookies) { setCookie(cookie); } } ~~~