近期需要实现一个功能,就是需要通过发送短信进行注册,现在想把短信验证码放到服务器的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. SQL注入的各种类型的检测方式

    #SQL注入各个类型检测方式 http://127.0.0.1/day6/1.php?id=1 union select 1,name,pass from admin 数字型 数字型不用特意加字符,直 ...

  2. (转)java中对集合对象list的几种循环访问总结

    Java集合的Stack.Queue.Map的遍历   在集合操作中,常常离不开对集合的遍历,对集合遍历一般来说一个foreach就搞定了,但是,对于Stack.Queue.Map类型的遍历,还是有一 ...

  3. Hibernate的事务处理机制和flush方法的用法

    关于在使用hibernate在提交事务时常遇到的异常: an assertion failure occured (this may indicate a bug in Hibernate, but ...

  4. iOS多款源码分享

    iOS精选源码 列表联动,Linkage 电商商品详情 AxcUIKit-控件整合框架,快速简单的使用高级控件 GKNavigationBarViewController-导航栏联动 仿京东的加入购物 ...

  5. Vue实例对象的数据选项

    前面的话 一般地,当模板内容较简单时,使用data选项配合表达式即可.涉及到复杂逻辑时,则需要用到methods.computed.watch等方法.本文将详细介绍Vue实例对象的数据选项 data ...

  6. matplotlib实现数据可视化

    一篇matplotlib库的学习博文.matplotlib对于数据可视化非常重要,它完全封装了MatLab的所有API,在python的环境下和Python的语法一起使用更是相得益彰. 一.库的安装和 ...

  7. Linux 日常常用指令

    最近搞了一个阿里ECS,CentOS7,涉及到一些基本的Linux指令,在这里总结一下,在搭环境中常用的一些指令,熟悉这些指令就基本能够使用CentOS进行日常操作了. 更多的可以参考系统自带的  “ ...

  8. Java中的char究竟能存中文吗?

    今天面试被问到"Java中的char能存中文吗?",我回答有的字能有的字不能,结果被嘲笑了,不过我也忘了字符编码的相关知识所以也没能解释.晚上查了下资料,记录一下. 网上搜索这个问 ...

  9. pentaho专题系列之kettle篇--kettle源码编译

    最近看了一些kettle的文章,都是kettle7.0以前的,已经跟不上时代了.截止笔者写这篇文章的时候,github上面的已经是7.1.0.3了,而且是发行版的,最新的快照版本已经是8.0的了.基于 ...

  10. python 字符串 string

    字符串 string 语法: a = 'hello world!' b = "hello world!" 常用操作: 1.乘法操作是将字符串重复输出2遍 >>> ...