近期需要实现一个功能,就是需要通过发送短信进行注册,现在想把短信验证码放到服务器的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. git 开发merge rebase 记录

    git status git lg git add src/ git commit -m "restful api and portal" //先commit到自己的本地branc ...

  2. 通过调整表union all的顺序优化SQL

    操作系统:Windows XP 数据库版本:SQL Server 2005 今天遇到一个SQL,过滤条件是自动生成的,因此,没法通过调整SQL的谓词达到优化的目的,只能去找SQL中的“大表”.有一个视 ...

  3. MySQL主从复制与lvs+keepalived单点写入读负载均衡高可用实验【转】

    一.环境Master(主机A):192.168.1.1Slave(主机B) :192.168.1.2  W-VIP(写入)  :192.168.1.3 R-VIP(读取)  :192.168.1.4  ...

  4. CF653F Paper task

    题目链接:洛谷 首先我们不考虑本质不同这个限制. 既然不能直接用栈乱搞,我们就可以用一个前缀和的套路了. 我们将(设为1,将)设为-1,记前缀和为$s_i$,则$[i,j]$这一段是回文子串当且仅当 ...

  5. 原生js操作Dom命令总结

    常用的dom方法 document.getElementById(“box”);//通过id获取标签    document.getElementsByTagName(“div”);根据标签名获取页面 ...

  6. vue实现添加与删除图书

    先放大图,当我们点击删除的时候,图书名单就会被我们删掉.当我们重新添加回来或者添加新书的时候,我们只需要在添加新书这里添加即可. 当我点击删除的时候,只需要的就是除却删除的那一个书籍之后剩下的图书. ...

  7. ruby-from-other-languages

    http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-python/ http://www. ...

  8. Android 布局类控件

    Android提供6种布局类的控件:LinearLayout.TableLayout.GridLayout.FrameLayout.RalativeLayout.AbsoluteLayout 网上搜到 ...

  9. ASP.NET Page执行顺序如:OnPreInit()、OnInit()

    http://www.cnblogs.com/yeminglong/archive/2012/10/16/2725664.html 当页面进行回发时,如点击按钮,以上事件都会重新执行一次,这时的执行顺 ...

  10. IOS #ifdef 的那些事儿

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u012884714/article/details/25188685 格式有点乱,整了几次都整只是来 ...