zoukankan      html  css  js  c++  java
  • HttpClient 和 HttpURLConnection 共用session

         最近又开始折腾android项目了,项目中需要请求服务器段的接口,又要涉及到图片的资源,比较纠结的是,我开始着手这个项目的时候,网络请求的框架已经完成了,现在存在一个问题就是,请求接口的使用的是HttpClient,这个是已经封装好了,不方便修改的,但是图片下载,如果这套框架的话,很不方便(涉及到多线程下载图片和缓存),挺纠结的,打算用他的框架,但是ListView中的列表图片用HttpClient下载有点太浪费,决定使用HttpURLConnection来下载,就在开始做的时候,遇到了一个很纠结的问题,这个软件需要登录的,登录的时候使用的是HttpClient,这个时候,保存的Session就在HttpClient了,如果我使用HttpURLConnection下载图片的话,服务器发现我的请求没有包含Session,直接跳转到登录界面了,挺纠结的,最后就想到了使用HttpClient HttpURLConnection 共用session,针对这个问题,没搞过,查了一下资料,其实客户端保存的Session就是一个cookie,针对这个问题,自己测试研究了一下,最终还是搞定了,写一下大致的方法:


    如果使用HttpClient登录的话,会从服务器段获取到一个SessionID,得到SessionID的代码如下:

    			List<Cookie> cookies = client.getCookieStore().getCookies();
    			Cookie cookie = null;
    			String sessionId = null;
    			for (int i = 0; i < cookies.size(); i++) {
    				cookie = cookies.get(i);
    				if("jsessionid".equalsIgnoreCase(cookie.getName())){
    					sessionId = cookie.getValue();
    					LogUtil.i(TAG, "cookieId="+sessionId);
    					PreferenceUtils.setData("cookie", sessionId);
    				}
    			}



    以上代码中,SessionId就是登录成功后,得到的SessionId,可以把这个Session保存下来(PreferenceUtils.setData这个方法就是我保存的方法)



    下面就是使用SessionId来共享Session

    			URL m = new URL(url);
    			HttpURLConnection connection = (HttpURLConnection) m.openConnection();
    			String cookie = PreferenceUtils.getData("cookie");
    			connection.setRequestProperty("Cookie", "JSESSIONID="+cookie);
    			InputStream inputStream = connection.getInputStream();


    上面的代码:PreferenceUtils.getData是我获取刚才保存SessionId的方法

    connection.setRequestPreperty这个方法,其实就是给HttpURLConnection添加Header session能与服务器保持回话,其实就是每次请求加上一个Header,这个headerkey就是“Cookie” Value就是“JSESSION=sessionId” 注意大小写,使用的时候,请把sessionId替换成登录成功后获取到的sessionID;相关的技术点就这些,主要还是sessionID的共享!



  • 相关阅读:
    替换空格-请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
    cocoapod卡在了analyzing dependencies
    前台技术--div的隐藏与显示
    POJ 3252 Round Numbers(组合数学)
    6. oracle学习入门系列之六 模式
    Python基础教程之第3章 使用字符串
    PHP+FastCGI+Nginx动态请求处理配置
    cocos2d-x cocoStudioUI编辑器导出文件的使用
    分布式系统生成唯一主键
    Android-Volley网络通信框架(二次封装数据请求和图片请求(包含处理请求队列和图片缓存))
  • 原文地址:https://www.cnblogs.com/springskyhome/p/3689915.html
Copyright © 2011-2022 走看看