近期需要实现一个功能,就是需要通过发送短信进行注册,现在想把短信验证码放到服务器的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的更多相关文章

  1. 自己实现FormsAuthentication.SetAuthCookie方法,怎样在ASP.NET服务端代码中删除客户端Cookie

    如何手动设置AuthCookie ASP.NET中实现可以自己实现FormsAuthentication.SetAuthCookie方法,控制更为灵活 /// <summary> /// ...

  2. Asp.Net_ 服务端向客户端写JavaScript脚本

    在Asp.net 服务端处理脚本,一般都用 ClientScriptManager ,即web窗体服务端的this.ClientScript.该对象比较常用的方法: 1.RegisterArrayDe ...

  3. 如何通过JavaScript构建Asp.net服务端控件

    摘要 虽然ASP.NET的服务器控件一直被大家所诟病,但是用户控件(ACSX)在某些场景下还是非常有用的. 在一些极特珠的情况下,我们会使用JavaScript动态的构建页面中的控件,但假设遇到了我要 ...

  4. android 38 Abdroid客户端和服务端交互

    服务端: package com.sxt.day05; import java.io.IOException; import java.util.ArrayList; import javax.ser ...

  5. Android ListView分页载入(服务端+android端)Demo

    Android ListView分页载入功能 在实际开发中经经常使用到,是每一个开发人员必须掌握的内容,本Demo给出了服务端+Android端的两者的代码,并成功通过了測试. 服务端使用MyEcli ...

  6. Android上传图片到服务器,服务端利用.NET WCFRest服务读取文件的解决方案

    在项目中遇到要将Android设备拍摄的照片上传的服务器,将文件保存在服务器本地的文件夹中,数据库中保存的是图片文件名.整个上传是将图片生成二进制流通过HTTP请求上传到服务端,服务端是基于.NET环 ...

  7. android 图片上传到服务端 文件损坏问题

    在网上找的例子,怎么试都不行. 上传上去之后提示文件损坏,不过最后问题还是找到了. 是因为不能在写入流的byte中写入其他内容 这是网上的例子 如果是要在服务端取文件名,可以在这里写入 在服务端获取文 ...

  8. java访问webservce,保持会话,服务端保存session验证

    在进行程序开发的过程中,遇到一个问题,怎么保持会话. 因为一帮进行方法调用很少涉及到即时身份验证的. 例如: 1:客户端登录后服务端保存登录用户信息: 2:客户端持有验证通过key再次请求: 3:服务 ...

  9. 服务端关闭session的重要性

    原因如下: 如果你的站点是一个每日请求上百万级规模的接口服务, 每一次请求(这里应该是没有携带cookie的请求)都会在服务端产生一个session会话,也就是一个小文件. 一般而言,php的sess ...

随机推荐

  1. 《HelloGitHub》第 16 期

    <HelloGitHub>第 16 期 兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这是一个面向编程新手.热爱编程. ...

  2. Charts 常见使用类型实例

    Charts是做什么的: 在我们平时的开发中,当使用到一些统计图表的时候,我们该怎样去做那些柱形的统计图.那些折线统计图.扇形统计图,亦或是你在做金融相关的项目那些股票走势等等的UI我们改怎样做?上面 ...

  3. Spring源码情操陶冶-AbstractApplicationContext#obtainFreshBeanFactory

    前言-阅读源码有利于陶冶情操,本文承接前文Spring源码情操陶冶-AbstractApplicationContext 约束: 本文指定contextClass为默认的XmlWebApplicati ...

  4. 【javascript】继承

    1. js 其实是一个非面向对象的语言,通过对象的深浅复制完成继承 2. 继承方法 继承的方法有两种 1)prototype 原型模式 举个例子 var Animal = function () { ...

  5. Django中ORM模型总结(一)[概述,查询语句]

    理解ORM框架 概述 O:(objects)->类和对象. R:(Relation)->关系,关系数据库中的表格. M:(Mapping)->映射. 作用: 可以通过类和类对象就可以 ...

  6. Hbase单机安装部署

    Hbase单机安装部署 http://blogxinxiucan.sh1.newtouch.com/2017/07/27/Hbase单机安装部署/ 下载Hbase Hbase官网下载地址 http:/ ...

  7. NlpirParser智能挖掘平台词性标注新算法

    词性标注是自然语言浅层理解的一个重要环节,它可帮助系统自动判定词语所属的语法范畴,为进一步处理提供更高层面的支持.词性标注主要任务是消除词性兼类歧义,对于新信息检测来说,它的实际意义还在于: (1)能 ...

  8. 勤快的love枫[ZJOI2007]

    题目描述 小绝恋love 枫是一个出纳,经常需要做一些统计报表的工作.今天是绝恋love 枫的生日,小绝恋love 枫希望可以帮爸爸分担一些工作,作为他的生日礼物之一.经过仔细观察,小绝恋love 枫 ...

  9. H5投放在朋友圈广告做压力测试

    一.环境 MacOS Sierra 二.背景 朋友圈广告投放的H5需要做ab压测,这里不赘述. 具体官方文档如下:http://ad.weixin.qq.com/learn/n10 三.正文 (1)别 ...

  10. JVM学习笔记五:虚拟机类加载机制

    类加载生命周期 类加载生命周期:加载.验证.准备.解析.初始化.使用.卸载 类加载或初始化过程什么时候开始? 遇到new.getstatic.putstatic或invokestatic这4条字节码指 ...