android如何与asp.net服务端共享session
近期需要实现一个功能,就是需要通过发送短信进行注册,现在想把短信验证码放到服务器的session值中,当客户端收到短信并提交短信码时由asp.net服务端进行判断,那么如何共享这个session那么需要在android客户端中添加几行代码。如下操作。第一次数据请求时就获取这个cookie的名称并且得到这个cookie的值,这个即是sessionid的值并保存在一个静态变量中,然后在第二次请求数据的时候要将这个sessionid一并放在Cookie中发给服务器,服务器则是通过这个sessionid来识别究竟是那个客户端在请求数据的,在asp.net中这个sessionid的名字叫做ASP.NET_SessionId,当然我们可以从程序中获取,如下代码:
//获取服务端的这个sessionid的名称
/* 获取cookieStore */
List<Cookie> cookies = cookieStore.getCookies();
for(int i=0;i<cookies.size();i++){
String sessionid = cookies.get(i).getName(); 从这里可以获取到这个sessionid,即为 ASP.NET_SessionId
}
获取sessionid的值
for(int i=0;i<cookies.size();i++){
if("ASP.NET_SessionId".equals(cookies.get(i).getName())){
JSESSIONID = cookies.get(i).getValue(); //这个即为sessionid的值
break;
}
}
完整的httputils代码如下:
public static DefaultHttpClient httpClient = null;
private static String JSESSIONID; //定义一个静态的字段,保存sessionID
public static String getRequest(String url)
{
httpClient = new DefaultHttpClient();
HttpGet get = new HttpGet(url);
try
{
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, 10000);//设置连接超时
HttpConnectionParams.setSoTimeout(params, 15000);//设置请求超时
get.setParams(params);
get.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
if(null != JSESSIONID){
get.setHeader("Cookie", "ASP.NET_SessionId="+JSESSIONID);
}
//连接响应,通过HttpResponse获得响应信息
HttpResponse httpResponse = httpClient.execute(get);
if(httpResponse.getStatusLine().getStatusCode() == 200)
{
//取得响应字符串
String result = EntityUtils.toString(httpResponse.getEntity());
return result;
}
}
catch (ClientProtocolException e)
{
return null;
}
catch (IOException e)
{
return null;
}
return null;
}
public static String postRequest(String url, HashMap<String, String> rawParams) throws Exception
{
httpClient = new DefaultHttpClient();
//创建POST请求方式
HttpPost post = new HttpPost(url);
HttpParams cparams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(cparams, 10000);//设置连接超时
HttpConnectionParams.setSoTimeout(cparams, 15000);//设置请求超时
post.setParams(cparams);
post.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
if(null != JSESSIONID){
post.setHeader("Cookie", "ASP.NET_SessionId="+JSESSIONID);
}
//使用NameValuePair来保存要传递的参数,可以使用BasicNameValuePair来构造一个要被传递的参数
//通过add添加这个参数到NameValuePair中
ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
for(String key : rawParams.keySet())
{
//添加要传传递的参数
params.add(new BasicNameValuePair(key, rawParams.get(key)));
}
//post需要为参数设置字符集
HttpEntity httpEntity = new UrlEncodedFormEntity(params, HTTP.UTF_8);
//请求httpRequest
post.setEntity(httpEntity);
//发送POST请求并获取响应
HttpResponse httpResponse = null;
try
{
httpResponse = httpClient.execute(post);
}
catch(Exception ex)
{
String ee = ex.getMessage();
}
if(httpResponse.getStatusLine().getStatusCode() == 200)
{
String result = EntityUtils.toString(httpResponse.getEntity(), HTTP.UTF_8);
/* 获取cookieStore
ASP.NET_SessionId就是通过上面的方法获取到。
*/
CookieStore cookieStore = httpClient.getCookieStore();
List<Cookie> cookies = cookieStore.getCookies();
for(int i=0;i<cookies.size();i++){
if("ASP.NET_SessionId".equals(cookies.get(i).getName())){
JSESSIONID = cookies.get(i).getValue();
break;
}
}
return result;
}
return null;
}
public class HttpUtils {//创建一个http链接public static DefaultHttpClient httpClient = null; private static String JSESSIONID; //定义一个静态的字段,保存sessionID public static String getRequest(String url) { httpClient = new DefaultHttpClient(); HttpGet get = new HttpGet(url); try { HttpParams params = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(params, 10000);//设置连接超时 HttpConnectionParams.setSoTimeout(params, 15000);//设置请求超时 get.setParams(params); get.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); if(null != JSESSIONID){ get.setHeader("Cookie", "ASP.NET_SessionId="+JSESSIONID); } //连接响应,通过HttpResponse获得响应信息 HttpResponse httpResponse = httpClient.execute(get); if(httpResponse.getStatusLine().getStatusCode() == 200) { //取得响应字符串 String result = EntityUtils.toString(httpResponse.getEntity()); return result; } } catch (ClientProtocolException e) { return null; } catch (IOException e) { return null; } return null; } public static String postRequest(String url, HashMap<String, String> rawParams) throws Exception { httpClient = new DefaultHttpClient(); //创建POST请求方式 HttpPost post = new HttpPost(url); HttpParams cparams = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(cparams, 10000);//设置连接超时 HttpConnectionParams.setSoTimeout(cparams, 15000);//设置请求超时 post.setParams(cparams); post.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); if(null != JSESSIONID){ post.setHeader("Cookie", "ASP.NET_SessionId="+JSESSIONID); } //使用NameValuePair来保存要传递的参数,可以使用BasicNameValuePair来构造一个要被传递的参数 //通过add添加这个参数到NameValuePair中 ArrayList<NameValuePair> params = new ArrayList<NameValuePair>(); for(String key : rawParams.keySet()) { //添加要传传递的参数 params.add(new BasicNameValuePair(key, rawParams.get(key))); } //post需要为参数设置字符集 HttpEntity httpEntity = new UrlEncodedFormEntity(params, HTTP.UTF_8); //请求httpRequest post.setEntity(httpEntity); //发送POST请求并获取响应 HttpResponse httpResponse = null; try { httpResponse = httpClient.execute(post); } catch(Exception ex) { String ee = ex.getMessage(); } if(httpResponse.getStatusLine().getStatusCode() == 200) { String result = EntityUtils.toString(httpResponse.getEntity(), HTTP.UTF_8); /* 获取cookieStore */ CookieStore cookieStore = httpClient.getCookieStore(); List<Cookie> cookies = cookieStore.getCookies(); for(int i=0;i<cookies.size();i++){ if("ASP.NET_SessionId".equals(cookies.get(i).getName())){ JSESSIONID = cookies.get(i).getValue(); break; } } return result+"SESSIONID="+JSESSIONID; } return null; } //检测网络是否有连接 public static boolean isConnect(Context c) { try { // 获取手机所有连接管理对象(包括对wi-fi,net等连接的管理) ConnectivityManager connectivity = (ConnectivityManager)c.getSystemService(Context.CONNECTIVITY_SERVICE); if(connectivity != null) { // 获取网络连接管理的对象 NetworkInfo info = connectivity.getActiveNetworkInfo(); if(info != null) { return true; // 判断当前网络是否已经连接 // if (info.getState() == NetworkInfo.State.CONNECTED) { // return true; // } } } return false; } catch(Exception e) { return false; } } public static String getCurrentIp() { try { for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) { //if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet6Address) { return inetAddress.getHostAddress().toString(); } } } } catch (Exception e) { } return ""; } public static void CancelHttpClient() { if(httpClient != null) { httpClient.getConnectionManager().shutdown(); } }}
android如何与asp.net服务端共享session的更多相关文章
- 自己实现FormsAuthentication.SetAuthCookie方法,怎样在ASP.NET服务端代码中删除客户端Cookie
如何手动设置AuthCookie ASP.NET中实现可以自己实现FormsAuthentication.SetAuthCookie方法,控制更为灵活 /// <summary> /// ...
- Asp.Net_ 服务端向客户端写JavaScript脚本
在Asp.net 服务端处理脚本,一般都用 ClientScriptManager ,即web窗体服务端的this.ClientScript.该对象比较常用的方法: 1.RegisterArrayDe ...
- 如何通过JavaScript构建Asp.net服务端控件
摘要 虽然ASP.NET的服务器控件一直被大家所诟病,但是用户控件(ACSX)在某些场景下还是非常有用的. 在一些极特珠的情况下,我们会使用JavaScript动态的构建页面中的控件,但假设遇到了我要 ...
- android 38 Abdroid客户端和服务端交互
服务端: package com.sxt.day05; import java.io.IOException; import java.util.ArrayList; import javax.ser ...
- Android ListView分页载入(服务端+android端)Demo
Android ListView分页载入功能 在实际开发中经经常使用到,是每一个开发人员必须掌握的内容,本Demo给出了服务端+Android端的两者的代码,并成功通过了測试. 服务端使用MyEcli ...
- Android上传图片到服务器,服务端利用.NET WCFRest服务读取文件的解决方案
在项目中遇到要将Android设备拍摄的照片上传的服务器,将文件保存在服务器本地的文件夹中,数据库中保存的是图片文件名.整个上传是将图片生成二进制流通过HTTP请求上传到服务端,服务端是基于.NET环 ...
- android 图片上传到服务端 文件损坏问题
在网上找的例子,怎么试都不行. 上传上去之后提示文件损坏,不过最后问题还是找到了. 是因为不能在写入流的byte中写入其他内容 这是网上的例子 如果是要在服务端取文件名,可以在这里写入 在服务端获取文 ...
- java访问webservce,保持会话,服务端保存session验证
在进行程序开发的过程中,遇到一个问题,怎么保持会话. 因为一帮进行方法调用很少涉及到即时身份验证的. 例如: 1:客户端登录后服务端保存登录用户信息: 2:客户端持有验证通过key再次请求: 3:服务 ...
- 服务端关闭session的重要性
原因如下: 如果你的站点是一个每日请求上百万级规模的接口服务, 每一次请求(这里应该是没有携带cookie的请求)都会在服务端产生一个session会话,也就是一个小文件. 一般而言,php的sess ...
随机推荐
- 《HelloGitHub》第 16 期
<HelloGitHub>第 16 期 兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这是一个面向编程新手.热爱编程. ...
- Charts 常见使用类型实例
Charts是做什么的: 在我们平时的开发中,当使用到一些统计图表的时候,我们该怎样去做那些柱形的统计图.那些折线统计图.扇形统计图,亦或是你在做金融相关的项目那些股票走势等等的UI我们改怎样做?上面 ...
- Spring源码情操陶冶-AbstractApplicationContext#obtainFreshBeanFactory
前言-阅读源码有利于陶冶情操,本文承接前文Spring源码情操陶冶-AbstractApplicationContext 约束: 本文指定contextClass为默认的XmlWebApplicati ...
- 【javascript】继承
1. js 其实是一个非面向对象的语言,通过对象的深浅复制完成继承 2. 继承方法 继承的方法有两种 1)prototype 原型模式 举个例子 var Animal = function () { ...
- Django中ORM模型总结(一)[概述,查询语句]
理解ORM框架 概述 O:(objects)->类和对象. R:(Relation)->关系,关系数据库中的表格. M:(Mapping)->映射. 作用: 可以通过类和类对象就可以 ...
- Hbase单机安装部署
Hbase单机安装部署 http://blogxinxiucan.sh1.newtouch.com/2017/07/27/Hbase单机安装部署/ 下载Hbase Hbase官网下载地址 http:/ ...
- NlpirParser智能挖掘平台词性标注新算法
词性标注是自然语言浅层理解的一个重要环节,它可帮助系统自动判定词语所属的语法范畴,为进一步处理提供更高层面的支持.词性标注主要任务是消除词性兼类歧义,对于新信息检测来说,它的实际意义还在于: (1)能 ...
- 勤快的love枫[ZJOI2007]
题目描述 小绝恋love 枫是一个出纳,经常需要做一些统计报表的工作.今天是绝恋love 枫的生日,小绝恋love 枫希望可以帮爸爸分担一些工作,作为他的生日礼物之一.经过仔细观察,小绝恋love 枫 ...
- H5投放在朋友圈广告做压力测试
一.环境 MacOS Sierra 二.背景 朋友圈广告投放的H5需要做ab压测,这里不赘述. 具体官方文档如下:http://ad.weixin.qq.com/learn/n10 三.正文 (1)别 ...
- JVM学习笔记五:虚拟机类加载机制
类加载生命周期 类加载生命周期:加载.验证.准备.解析.初始化.使用.卸载 类加载或初始化过程什么时候开始? 遇到new.getstatic.putstatic或invokestatic这4条字节码指 ...