当前位置: 移动技术网 > IT编程>移动开发>Android > android与asp.net服务端共享session的方法详解

android与asp.net服务端共享session的方法详解

2019年07月24日  | 移动技术网IT编程  | 我要评论

听海伴奏,汉宜高速,冰雨卡盟

前言

最近因为工作的需要,要实现一个功能,就是需要通过发送短信进行注册,现在想把短信验证码放到服务器的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;

 }

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对移动技术网的支持。
 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网