httpmime-session 会话保持
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 会话保持的更多相关文章
- 负载均衡session会话保持方法
负载均衡时,为了保证同一用户session会被分配到同一台服务器上,可以使用以下方法:1.使用cookie将用户的session存入cookie里,当用户分配到不同的服务器时,先判断服务器是否存在该用 ...
- PHP中的session会话创建打印释放销毁;
PHP Session PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置.Session 变量存储单一用户的信息,并且对于应用程序中的 ...
- 跨域请求,关于后端session会话丢失的解决办法
目前使用前后端分离的模式开发,后端提供跨域接口.前端jsonp调用,绑定数据,但是在该站点下有个人中心模块存在的情况下,服务端的session会话会被跨域请求覆盖改掉 大家都知道tomcat使用coo ...
- SESSION会话技术
以下对session会话技术详解: 要了解点http协议理解更佳--->http请求头和http相应头 在session_start的时候,浏览器会向服务器发出请求 在请求的同时,如果是第一次a ...
- PHP漏洞之session会话劫持
本文主要介绍针对PHP网站Session劫持.session劫持是一种比较复杂的攻击方法.大部分互联网上的电脑多存在被攻击的危险.这是一种劫持tcp协议的方法,所以几乎所有的局域网,都存在被劫持可能. ...
- session会话管理
session会话和cookie一起被称为会话跟踪技术,主要通过保存在服务器端的session数据和客户端浏览器的cookie数据共同完成用户访问服务器的足迹记录. 1. 什么是会话 会话sessio ...
- SpringMVC归纳-2(Session会话、拦截器)
要点: 1.HttpSession:一个session的建立是从一个用户向服务器发第一个请求开始,而以用户显式结束或session超时为结束,借助session能在一定时间内记录用户状态. 2.Mod ...
- 分布式Tomcat session会话Sticky Sessions问题
分布式session会话Sticky Sessions - tomcat_baby的专栏 - CSDN博客https://blog.csdn.net/tomcat_baby/article/detai ...
- session会话对象
一.session会话对象介绍: 会话对象让你能够跨请求保持某些参数,它也会在同一个session实例发出的所有请求之间保持cookie. 二.步骤 1.对session对象进行一次实例化 2.进行登 ...
- Nginx负载均衡session会话保持方法
负载均衡时,为了保证同一用户session会被分配到同一台服务器上,可以使用以下方法: 1.使用cookie 将用户的session存入cookie里,当用户分配到不同的服务器时,先判断服务器是否存在 ...
随机推荐
- 如何通过PhpMyAdmin批量删除MYSQL数据库数据表
使用这个方法前,强烈建议先备份整个数据库.至于怎么备份?你不会么?在本文下方留言吧. 具体方法:复制下面的php执行语句,保存为sql.php文件(注意配置数据库名称.密码.数据表头),通过ftp上传 ...
- echars3.0 柱状图y轴字体斜放
xAxis: [ { type: 'category', axisLabel: { interval: 0, rotate: 45,//倾斜角度设置,是什么时针未测 margin: 2 //距离上部的 ...
- Android 命令行编译、打包生成apk文件
一.搭建搭建环境 1. 安装JDK 和 Android SDK 2. 配置环境变量 D:\android-sdk-windows\tools C:\Program Files\Java\jdk1. ...
- (转)Mysql数据库读写分离配置
环境模拟 实现读写分离 减轻数据库的负荷 主服务器 master 10.0.0.12从服务器 slave 10.0.0.66 ------------------------------------- ...
- [Bootstrap]全局样式(一)
页面必须设置为html5文档类型 <!DOCTYPE html> <html lang="zh-CN"> ... </html> 适应移动设备 ...
- Java编程思想之字符串
来自:Java编程思想(第四版) 第十三章 字符串 字符串操作是计算机程序中最常见的行为. String对象是不可变的.查看JDK文档你就会发现,String类中每一个看起来会修改String ...
- ArcGIS Server10.1授权文件
3dengine,101,ecp.arcgis.server,01-jan-2020,UTE784S3EY83ZJKN0085 3dserver,101,ecp.arcgis.server,01-ja ...
- object-c实现的 在PHP中oauth加密算法
说起这个算法,在php中我是这么实现的 function generateSig ($params, $secret = '') { if (empty($secret)) { ...
- maven增量编译
最近由于不清楚maven(2.2.x)增量编译的机制,导致应用出现了一个当时觉得非常诡异的一个问题.先描述一下问题. 背景是应用A有一个公用的base包,版本为1.6.6-SNAPSHOT,应 ...
- python学习之jquery小练习
<html> <head> <title>html/css/js学习小结</title> <script src="jquery-1.8 ...