sesion在浏览器和web服务器直接是通过一个叫做name为sessionid的cookie来传递的,所以只要在每次数据请求时保持sessionid是同一个不变就可以用到web的session了,做法是第一次数据请求时就获取sessionid的值并保存在一个静态变量中,然后在第二次请求数据的时候要将这个sessionid一并放在Cookie中发给服务器,服务器则是通过这个sessionid来识别究竟是那个客户端在请求数据的,

在php中这个sessionid的名字叫做PHPSESSID

在Java中这个sessionid的名字叫做JSESSIONID

 /**
* post请求
*
* @param uri
* @param params
* @param handler
* @param context
*/
public static void doPost(final String uri,
final HashMap<String, String> params, final Handler handler,
final Context context) {
final Message msg = handler.obtainMessage();
final ProgressDialog progress = ProgressDialog
.show(context, null, "加载");
new Thread() {
public void run() {
try {
HttpClient client = new DefaultHttpClient();
HttpPost httppost = new HttpPost(uri.trim());
MultipartEntity reqEntity = new MultipartEntity();
if (params != null) {
Set<String> param = params.keySet();
StringBuilder sb = new StringBuilder();
if (params != null && !params.isEmpty()) {
for (String par : param) {
String value = params.get(par);
if (null == value) {
return;
}
reqEntity.addPart(par, new StringBody(value,
Charset.forName("UTF-8")));
}
}
}
httppost.setEntity(reqEntity);
Log.i("info", "设置:" + JSESSIONID);
if (null != JSESSIONID) {
httppost.setHeader("Cookie", "JSESSIONID=" + JSESSIONID);
}
HttpResponse response = client.execute(httppost);
HttpEntity resEntity = response.getEntity();
Header[] hs = response.getAllHeaders();
for (Header h : hs) {
Log.i("info",
"header:" + h.getName() + "," + h.getValue());
}
if (resEntity != null) {
CookieStore mCookieStore = ((AbstractHttpClient) client)
.getCookieStore();
List<Cookie> cookies = mCookieStore.getCookies();
for (int i = 0; i < cookies.size(); i++) {
// 这里是读取Cookie['PHPSESSID']的值存在静态变量中,保证每次都是同一个值
if ("JSESSIONID".equals(cookies.get(i).getName())) {
JSESSIONID = cookies.get(i).getValue();
break;
}
}
Log.i("info", "取到:" + JSESSIONID); InputStream in = resEntity.getContent();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int i = -1;
while ((i = in.read()) != -1) {
baos.write(i);
}
msg.what = 1;
msg.obj = new String(baos.toByteArray(), "utf-8");
} else {
msg.what = 0;
}
} catch (IOException e) {
msg.what = 0;
msg.obj = "";
e.printStackTrace();
}
handler.sendMessage(msg);
if (null != progress) {
progress.dismiss();
}
};
}.start();
} public static String JSESSIONID = null;

其实web的原理都是一样的,基于http协议的,那么如果网站不是java,php做的话,那个叫做Sessionid的Cookie可能叫做别的了 ,而是叫做别的名字了,这个可能要具体情况去查了。

其实不只是Android程序,其他任何程序需要这么用的时候只需要在http协议请求header里头加上发送相应的SessionId就可以了。刚刚这种方法是可以帮助理解sessionid的,其实还有一种方法如果更通用的话,就可以将刚刚所有的Cookie每次都发回到服务器端,也就可以解决session保持的问题了,只是这样可能会稍微大些网络流量开销而已。

来自:http://l62s.iteye.com/blog/1663113

httpmime-session 会话保持的更多相关文章

  1. 负载均衡session会话保持方法

    负载均衡时,为了保证同一用户session会被分配到同一台服务器上,可以使用以下方法:1.使用cookie将用户的session存入cookie里,当用户分配到不同的服务器时,先判断服务器是否存在该用 ...

  2. PHP中的session会话创建打印释放销毁;

    PHP Session PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置.Session 变量存储单一用户的信息,并且对于应用程序中的 ...

  3. 跨域请求,关于后端session会话丢失的解决办法

    目前使用前后端分离的模式开发,后端提供跨域接口.前端jsonp调用,绑定数据,但是在该站点下有个人中心模块存在的情况下,服务端的session会话会被跨域请求覆盖改掉 大家都知道tomcat使用coo ...

  4. SESSION会话技术

    以下对session会话技术详解: 要了解点http协议理解更佳--->http请求头和http相应头 在session_start的时候,浏览器会向服务器发出请求 在请求的同时,如果是第一次a ...

  5. PHP漏洞之session会话劫持

    本文主要介绍针对PHP网站Session劫持.session劫持是一种比较复杂的攻击方法.大部分互联网上的电脑多存在被攻击的危险.这是一种劫持tcp协议的方法,所以几乎所有的局域网,都存在被劫持可能. ...

  6. session会话管理

    session会话和cookie一起被称为会话跟踪技术,主要通过保存在服务器端的session数据和客户端浏览器的cookie数据共同完成用户访问服务器的足迹记录. 1. 什么是会话 会话sessio ...

  7. SpringMVC归纳-2(Session会话、拦截器)

    要点: 1.HttpSession:一个session的建立是从一个用户向服务器发第一个请求开始,而以用户显式结束或session超时为结束,借助session能在一定时间内记录用户状态. 2.Mod ...

  8. 分布式Tomcat session会话Sticky Sessions问题

    分布式session会话Sticky Sessions - tomcat_baby的专栏 - CSDN博客https://blog.csdn.net/tomcat_baby/article/detai ...

  9. session会话对象

    一.session会话对象介绍: 会话对象让你能够跨请求保持某些参数,它也会在同一个session实例发出的所有请求之间保持cookie. 二.步骤 1.对session对象进行一次实例化 2.进行登 ...

  10. Nginx负载均衡session会话保持方法

    负载均衡时,为了保证同一用户session会被分配到同一台服务器上,可以使用以下方法: 1.使用cookie 将用户的session存入cookie里,当用户分配到不同的服务器时,先判断服务器是否存在 ...

随机推荐

  1. chrome浏览器取消置顶的方法

    这两天在使用google chrome浏览器的时候,发现chrome被默认置顶,取消chrome默认的方法为在浏览器上按 “ALT + Space + C”,然后再重开chorme就可以了.

  2. 什么是MVC开发模式以及它和传统开发模式的区别

    Model1模式:使用纯JSP或者JSP+JavaBean开发,存在如下缺陷:JSP页面中混合了HTML和JAVA代码,从而给代码的开发和阅读带 来了麻烦:系统后期维护和扩展非常困难,例如在JSP页面 ...

  3. 微信之Android各版本列表

    微信在不断地更新迭代,ios微信下载点击这里立即开始(手机电脑都可以,电脑端要安装iTunes),每个版本都放出一些新的功能或修复相关错误,详情可以点击下面的版本链接进行查看.(这里有Android微 ...

  4. BLK-MD-BC04-B蓝牙模块开发说明

    BLK-MD-BC04-B蓝牙模块开发说明 日期:2011-9-24 浏览次数:4178     BLK-MD-BC04-B蓝牙通信模块, BLK-MD-BC04-B蓝牙通信模块 为本公司自主开发的智 ...

  5. 关于JFinal拦截器的理解

    这是波总的亲自总结,记录一下: 1:拦截器可以用在两个层面,一个是"控制层",另一个是"业务层",其中"业务层"是一种狭义的说法,更加合理的 ...

  6. 提升程序的特权(AdjustTokenPrivileges)

    首先列出需要的函数 1.OpenProcessToken 2.AdjustTokenPrivileges 3. LookupPrivilegeValue ----------------------- ...

  7. 广度优先算法BFS

    package myalgorithm; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; / ...

  8. 滑动选择日期(基于sui-mobile的移动端)

    $(page).on('touchmove','#touchMoveTime',function (event) { touchMove(event); }); scrollBarInit(); // ...

  9. 怎么在spring官网上下载spring的jar包, 源代码和文档?

    现在 http://repo.spring.io/release/org/springframework/spring/第一种,简单粗暴直接 1 http://repo.springsource.or ...

  10. 图片grayscale(灰阶效果)webkit内核支持。

    filter:gray;-webkit-filter: grayscale(100%); 置为灰阶等hove时候 -webkit-filter: grayscale(0%);显示出彩色.